第1题:
SELECT * FROM table WHERE a = 1 and b = 2 and c = 3;
答案:(a,b,c)或者(c,b,a)或者(b,a,c)都可以
第2题:
SELECT * FROM table WHERE a > 1 and b = 2;
答案:对(b,a)建立索引
第3题:
SELECT * FROM `table` WHERE a > 1 and b = 2 and c > 3;
答案:如果a的区分度比较高就采用(b,a),否则就采用(b,c)
第4题:
SELECT * FROM `table` WHERE a = 1 ORDER BY b;
答案:一看就是对(a,b)建索引,当a = 1的时候,b相对有序,可以避免再次排序。
第5题:
SELECT * FROM `table` WHERE a > 1 ORDER BY b;
答案:对(a)建立索引,因为a的值是一个范围,这个范围内b值是无序的,没有必要对(a,b)建立索引
第6题:
SELECT * FROM `table` WHERE a IN (1,2,3) and b > 1;
答案:对(a,b)建立索引,因为IN在这里可以视为等值引用,不会中止索引匹配,所以还是(a,b)
联合索引遵循最左匹配原则,在遇到范围查询的时候,就会停止匹配。