*************************** ***************************
Table: user
Create Table: CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(10) NOT NULL DEFAULT '0',
`city` varchar(20) NOT NULL,
`addr` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_name_age_city` (`name`,`age`,`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
order by能使用索引最左前缀
* select id,name,age,city from user order by name;
* select id,name,age,city from user order by name,age,city;
* explain select id,name,age,city from user order by name desc,age desc,city desc;
Orderby 排序优化
Orderby 排序优化
Orderby 排序优化
如果where使用索引的最左前缀定义为常量,则order by 能使用索引
* select * from user where name = 'zhangsan' order by age,city;
* select * from user where name = 'zhangsan' and age = 20 order by city;
* select * from user where name = 'zhangsan' and age > 20 order by age,city;
Orderby 排序优化
Orderby 排序优化
Orderby 排序优化
不能使用索引进行排序
select * from user order by name,age,city;//query*字段
select * from user order by addr;//非索引字段排序
select * from user order by name,addr;//含有非索引字段
select * from user where age = 20 order by city;//跳过了name字段,违反最左前缀法则
select * from user where name = 'zhangsan' order by city;//跳过了age字段,违反最左前缀法则
select * from user where name = 'zhangsan' order by age,addr;//含有非索引字段