我有一个带有 2K 寄存器的 MySql 表 InnoDB
引擎。前两个字段是 PRIMARY KEY (AUTO INCREMENT)
叫id
和一个 INDEX KEY VARCHAR(255)
叫codreg
.
之前我的 table 上只有 PRIMARY KEY (VARCHAR(6))
叫codreg
.
问题在于新配置,通过 codreg(类似)进行的搜索比唯一的 codreg 配置慢。
主键索引比主键索引快吗?
这个问题与我必须执行此查询的性能问题有关
SELECT CE.*, GI.* FROM ($_q_aux) CE inner join table2 GI ON GI.codreg=CE.codreg
$_q_aux 是:
SELECT codreg FROM table2 WHERE codreg like '%string%'
表 1 有 2k 条目,表 2 有 20K 条目
执行时间太慢..
最佳答案
它们基本上是同一件事。但你真正的问题是你使用 varchar 进行 PK - 为什么? 您应该使用一些整数类型,例如 INT,您将看到真正巨大的性能改进。
如果你确实需要这样一个列varchar,那么首先检查你是否知道该字段的确切长度,如果你知道的话,那么你应该使用char(6)。
另请记住,当您进行“LIKE”搜索时,如果您仅将“%”放在最后一个位置,您的搜索速度会更快,否则它们将扫描每一行。因此,如果您可以使用 WHERE codreg,如“123%”,而不是“%123%”
关于mysql - 主键与键索引速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197387/