所以考虑我有下表:
表:
假设我使用在运行时不同的查询(一个网站,例如复选框表示是否搜索特定字段),一些可能的实例:
(对值使用一些x, y, z
)
SELECT * FROM table WHERE c1 = 1 AND c2 = 2
SELECT * FROM table WHERE c1 = 1 AND c2 = 2 AND c3 = x AND c4 = y
SELECT * FROM table WHERE c1 = 2 AND c2 = 3
SELECT * FROM table WHERE c1 = 2 AND c2 = 3 AND c5 = z
问题:
(c1, c2, c3, c4, c5)
的影响是什么?如何在几个查询中使用它?答案 0 :(得分:5)
MySQL文档很好地解释了多列索引如何工作here。
通常,当索引的最左侧侧的某些列具有相等条件时,索引可用于where
子句。您的where
子句使用以下列:
以列c1
和c2
开头的任何索引通常都会用于这些查询。 MySQL可以应用其他条件来使用索引,例如选择性。也就是说,如果c1
和c2
具有常量值(例如),那么使用索引将不会使查询受益。
要优化所有这些组合,您可以创建两个索引:c1, c2, c3, c4
和c2, c1, c5
。在第二个索引中交换c1
和c2
的原因是,可以处理条件为c2
但不是c1
的查询,以及相反的情况。
答案 1 :(得分:2)
如果您使用ìndex on (c1,c2,c3)
数据库将创建和索引良好的搜索... where c1=sth and c2=sth
有或没有c3。
这比单独的指数表现更好。
但是如果你只需要C2
作为where子句
如果您只需要c3
作为indext col,那么为它创建一个额外的索引。