mysql大量数据分页查询优化-延迟关联

小天天天天    Mysql    999+次    2018-03-02 10:28:23


所有的php初学者都应该知道,mysql的分页语句写法如下:

select * from a limit (page-1)*page_size,page_size

而当这语句分页到一定程度时,例如1000页,每页20条

select * from a limit 19980,20

会发现分页之后查询的会越来越慢

原因是因为limit a,b 的取数据方式是,先取出a+b条数据,再把a条筛选掉,剩b条,相当于一次性要取a+b条的数据,而a条其实是无用的

解决方案如下

一:php代码解决

例如我们先查询出第一页的数据:

select * from a limit 20

保留最后一个的id,当需要取第2页数据时,则

select * from a where id>最后一个的id limit 20

这样数据库就会每次都能走索引,然后只查出20条

缺点:不能从第一页跳转到第n页

缺点解决方案:前100页,不做优化,当到101页时采用该优化方案,并且不让用户从101页进行页面跳转到1xx页

二:mysql解决

SELECT
	*
FROM
	a
INNER JOIN (SELECT id FROM a LIMIT 19980, 20) AS lim USING (id);

使用该方法,会先从索引表取出索引id,然后进行using索引覆盖方法,因为先查询的是索引,然后才从索引里关联取出20条记录,大大的提升了查询速度


如果你觉得本篇文章对您有帮助,请打赏作者

最新评论

是他是他就是他 回复:赞!碉堡了!!![em_63]

2018-03-05 15:08:40 回复


网站数据

网站文章数:296

注册用户数:17

TOP