MySQL - 多列上的唯一索引

时间:2016-04-08 20:58:57

标签: mysql indexing

我们的想法是根据列c1c2c3进行快速查询。

有3种查询:

SELECT COUNT(*) FROM tbl WHERE c1=... AND c2=...
SELECT c2, c3 FROM tbl WHERE c1=...
SELECT DISTINCT c2 FROM tbl WHERE c1=... AND c3=...

如果我想(c1c2)是唯一的,那么构建索引的最佳方法是什么?

我正在考虑像这样的单个索引:

UNIQUE INDEX idx_c1_c2 (c1, c2)

但第三个查询不会使用此索引。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

WHERE c1= AND c2=以任意顺序需要INDEX(c1, c2)。如果该对是"唯一",则将其设为UNIQUE而不是INDEX。或者考虑将其设为PRIMARY KEY(也是UNIQUEINDEX)。

WHERE c1=很乐意使用任何类型的索引c1开始

WHERE c1= AND c3=只会使用c1的{​​{1}}部分,这会有所帮助。最好是以任何顺序添加另一个索引:(c1, c2)。建议INDEX(c1, c3)以获得一些变化。

没有单个索引可以正常工作"以及#34;对于所有三个查询。

如果表格为(c3, c1),则PRIMARY KEY搜索通常比UNIQUE INDEX更快。如果您现在Engine=InnoDBAUTO_INCREMENT,请考虑是否值得保留,而不是替换为"自然" PRIMARY KEY