最左前缀法则:
情景:
表student含有联合索引:
create index idx_age_classid on student(age, classid);
SQL:
(1):explain select * from student where classid = 30
![](https://img-blog.csdnimg.cn/0bab1823b16f47a08f6a2734b5526160.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyJ5rCU6LSo55qE54G16a2C,size_20,color_FFFFFF,t_70,g_se,x_16)
该 SQL 不走索引,因为不满足最左前缀法则。因为表中的数据并不是依据classid 来排序的
表中数据是在 age 排好序的前提下,classid 才是排好序的。 如果只有 classid 没有 age,无法走索引
(2):explain select * from student where age = 20 and classid = 30;
![](https://img-blog.csdnimg.cn/4b8cc1eae0614f37b177a937ea054165.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyJ5rCU6LSo55qE54G16a2C,size_20,color_FFFFFF,t_70,g_se,x_16)
满足最左前缀法则,走索引
like 左模糊查询:
场景:
表 student 存在name 索引:
create index idx_name on student(name);
SQL:
(1):
explain select * from student where name like ' Jim% ';