我们的想法是根据列c1
,c2
和c3
进行快速查询。
有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=...
如果我想(c1
,c2
)是唯一的,那么构建索引的最佳方法是什么?
我正在考虑像这样的单个索引:
UNIQUE INDEX idx_c1_c2 (c1, c2)
但第三个查询不会使用此索引。
有什么建议吗?
答案 0 :(得分:0)
WHERE c1= AND c2=
以任意顺序需要INDEX(c1, c2)
。如果该对是"唯一",则将其设为UNIQUE
而不是INDEX
。或者考虑将其设为PRIMARY KEY
(也是UNIQUE
和INDEX
)。
WHERE c1=
很乐意使用任何类型的索引以c1
开始。
WHERE c1= AND c3=
只会使用c1
的{{1}}部分,这会有所帮助。最好是以任何顺序添加另一个索引:(c1, c2)
。建议INDEX(c1, c3)
以获得一些变化。
没有单个索引可以正常工作"以及#34;对于所有三个查询。
如果表格为(c3, c1)
,则PRIMARY KEY
搜索通常比UNIQUE INDEX
更快。如果您现在Engine=InnoDB
为AUTO_INCREMENT
,请考虑是否值得保留,而不是替换为"自然" PRIMARY KEY
。