Mysql 主键与键索引速度

Mysql 主键与键索引速度,mysql,Mysql,我有一个带有2K寄存器的MySql表InnoDB引擎。前两个字段是主键(自动递增)称为id和索引键VARCHAR(255)称为codreg 以前,我的表只有一个名为codreg的主键(VARCHAR(6)) 问题在于新配置中,codreg(like)的搜索速度比唯一的codreg配置慢 主键索引是否比键索引快 这个问题与性能问题有关,我必须做这个查询 SELECT CE.*, GI.* FROM ($_q_aux) CE inner join table2 GI ON GI.codreg=CE.

我有一个带有2K寄存器的MySql表
InnoDB
引擎。前两个字段是
主键(自动递增)
称为
id
索引键VARCHAR(255)
称为
codreg

以前,我的表只有一个名为
codreg
主键(VARCHAR(6))

问题在于新配置中,codreg(like)的搜索速度比唯一的codreg配置慢

主键索引是否比键索引快

这个问题与性能问题有关,我必须做这个查询

SELECT CE.*, GI.* FROM ($_q_aux) CE inner join table2 GI ON GI.codreg=CE.codreg
$\u q\u辅助是:

SELECT codreg FROM table2 WHERE codreg like '%string%'
表1为2k条目,表2为20K条目


执行时间太慢了。

它们基本上是一样的。但您真正的问题是,您使用varchar进行PK-为什么? 您应该使用一些整数类型,如INT,您将看到真正伟大的性能改进

如果您确实需要这样一个列varchar,那么首先检查您是否知道字段的确切长度,如果您知道,那么您应该使用char(6)


还请记住,如果您确实喜欢搜索,并且只在最后一个位置放置“%”,则搜索速度会更快,否则会扫描每一行。因此,如果你可以使用WHERE codreg,比如“123%”,而不是“%123%”

谢谢你的编辑,有人能帮我吗?即使你没有说你使用哪个引擎,答案是-是的,PK比正常索引“快”。此外,
类似于
的搜索效率极低,如何执行(是否有效)也值得怀疑,加上PK使用varchar很可能不会产生最佳性能。你可以优化你的搜索,使之更快。即使没有索引。2k entries对于MySQL来说是沧海一粟。InnoDb是引擎。实际上,PK是一个自动递增的值,然后将您的
innodb\u buffer\u pool\u size
增加到一个更大的值,然后再次测量性能。谷歌首先做的是什么。阅读Nikola关于使用LIKE搜索的评论。在原始问题中添加新信息。你混合了有效和无效的建议,这就是为什么我没有投你反对票或赞成票。但你错的主要地方是说“它们基本上是一样的”。是的,索引一个数字或一个字符串归根结底是同一件事。但是,不同之处在于索引结构的物理组织方式(在InnoDB和TokuDB中)。这就是区别所在,也是为什么PK几乎总是比其他类型的索引(如果它们是非聚集的)产生更快的速度。在原始问题中添加了新信息我尝试使用“字符串%”,但性能没有提高。如果只尝试执行查询“从表2中选择codreg,其中codreg类似于“%string%”,那么性能很好,但问题是当我执行查询“从($\u q\u aux)CE内部连接表2 GI ON GI.codreg=CE.codreg”…有什么解决方法吗?谢谢