/*为什么一会是ALL一会是index
--mysql优化器发现全表扫描开销更低时,会直接用全表扫描
--可以使用索引避免排序
*/
explain
select * from employees order by first_name , last_name limit 10;
/*
查询条件是组合索引的第一个字段,orderby是组合索引的第二个字段
非主键索引会记录主键
【Bader,last_name1,emp_no】
【Bader,last_name2,emp_no】
【Bader,last_name3,emp_no】
【Bader,last_name4,emp_no】
按照last_name做字典排序
*/
explain
select * from employees where first_name = 'Bader' order by last_name;
/*
可以使用索引避免排序
【'Angel',lastname1,emp_no1】
【'Anni',lastname1,emp_no1】
【'Ack',lastname1,emp_no1】
【'bader',lastname1,emp_no1】
*/
explain
select * from employees where first_name < 'Bader' order by first_name;
/* 可以使用索引避免排序
*/
explain
select * from employees where first_name < 'Bader' and last_name > 'Peng' order by first_name;
/* 无法用索引避免排序
排序字段存在于多个索引中
--first_name =>(first_name,last_name)
--emp_no =>主键
当排序字段存在于多个索引,是无法避免排序的
*/
explain
select * from employees order by first_name,emp_no limit 10;
/* 无法用索引避免排序【升降序不一致】
*/
explain
select * from employees order by first_name desc,last_name asc limit 10;
/* 无法用索引避免排序【使用key_part1范围查询,使用key_part2进行排序】
*/
explain
select * from employees where first_name < 'Bader' order by last_name;
explain
select * from employees order by last_name limit 10;