Q1: select * from t_table where a > 1 and b = 2,联合索引(a, b)哪一个字段用到了联合索引的 B+Tree?
A1: easy啊,a用到了,b没用到。因为符合 a > 1 条件的二级索引记录的范围里,b 字段的值是无序的
Q2: select * from t_table where a >= 1 and b = 2,联合索引(a, b)哪一个字段用到了联合索引的 B+Tree?
A2: 你也许会说和上面Q1一样,a用到,b用不到。然而实际上是都能用到的。在a > 1 and b = 2这一部分确实用不到,但是a = 1 and b = 2是可以的,因为对于符合 a = 1 的二级索引记录的范围里,b 字段的值是「有序」的。二级所以扫描会从a = 1 and b = 2开始而不是a ≥\ge≥ 1开始,声调一部分扫描
Q3: SELECT * FROM t_table WHERE a BETWEEN 2 AND 8 AND b = 2,联合索引(a, b)哪一个字段用到了联合索引的 B+Tree?
A3: 和Q2一样,都用到了。从a = 2 and b = 2开始。
Q4: SELECT * FROM t_user WHERE name like ‘j%’ and age = 22,联合索引(name, age)哪一个字段用到了联合索引的 B+Tree?
A4: 同理,也是都用到了,从name = ‘j’ and age = 2开始。
最左匹配原则的误区,联合索引的使用细节
最新推荐文章于 2025-08-22 11:10:38 发布