例如,如果我有一个带有
显然,
city
和state
列的表格,最好的使用索引的方法是什么?显然,
city
具有最高的基数,因此我应该在索引中首先放置该列,还是应该放置state
列,或者并不重要?city
和state
列的表格,最好的使用索引的方法是什么?city
具有最高的基数,因此我应该在索引中首先放置该列,还是应该放置state
列,或者并不重要?在这种情况下,这并不重要:
INDEX cs (city, state),
INDEX sc (state, city)
WHERE city = 'Atlanta'
AND state = 'Georgia'
使用任何一个索引,BTree的钻取过程都是相同的,你将以同样的速度到达这一行。
(WHERE
子句中的顺序无关紧要。)
(如果您正在使用“范围”测试而不是=
测试,那么这是另一个问题。)
MySQL的复合索引查询必须按照索引中定义的列的顺序进行。由于您希望MySQL能够通过尽可能少的比较区分记录,在所有其他条件相等的情况下,您将从具有从最高基数到最低基数排序的列的复合索引中获得最大的收益。
也就是说,假设最终必须根据最高基数的列来区分记录,为什么要强制先对最低基数的列进行比较,而最终可能是不必要的呢?