例如,如果我的表格中包含city
和state
列,那么使用该索引的最佳方式是什么?
显然city
将具有最高的基数,所以我应该将该列放在索引中,我应该放置状态还是不重要?
答案 0 :(得分:2)
MySQL复合索引查找必须按索引中定义列的顺序进行。由于您希望MySQL能够通过执行尽可能少的比较来区分记录,并且所有其他条件相同,您将从复合索引中获益最多,其中列从最高到最低基数排序。
也就是说,假设最终必须对最高基数列进行比较才能区分记录,为什么在最终可能没有必要的情况下,首先对最低基数列进行强制比较呢?
答案 1 :(得分:2)
在这种情况下无关紧要:
INDEX cs (city, state),
INDEX sc (state, city)
WHERE city = 'Atlanta'
AND state = 'Georgia'
使用任何一个索引,BTree中的向下钻取将是同样的努力,您将以同样快的速度进入一行。
(WHERE
中的条款顺序无关紧要。)
(如果您使用“范围”测试而不是=
测试,那就是a different Question。)