情况:分页前面很快,后面的页很慢

原始语句

select id,birthday,title from person order by title limit 400000,1

分析:此语句效率低主要是因为有排序

改进

select id,birthday,title from person as p1 
join 
(select id from person order by title limit 400000,1) p2
on p1.id=p2.id;

表结构

CREATE TABLE `person` (
	`id` int NOT NULL AUTO_INCREMENT,
	`birthday` date DEFAULT NULL,
	`title` varchar(100) DEFAULT NULL,
	`comm1` varchar(6383) DEFAULT NULL,
	PRIMARY KEY (`id`) ,
	KEY `p_1`(`title`)
)ENGINE=InnODB AUTO_INCRENENT=438174 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

总结: 二级索引 p_1 实际上是包含 主键索引的,P2临时表只查询这两个字段所以会提高查询速度 利用的就是索引比表小的多的原理,如果索引不合适,条件覆盖不到,那一样会很慢。

转载来源