Advertisement

MySQL数据库分页功能查询优化

阅读量:

问题描述

在mysql中使用limit[offset]来实现数据分页时往往都会遇到深度分页问题这种现象随着页面数量的增多其性能表现会逐渐恶化

复制代码
    select * from student order by id limit 200000,10;

正如前面所述,在第2万页中提取10条数据是我们期望的目标。然而,在执行过程中发现,在第一页提取所需数据所需时间明显少于在第二万页中提取同样数量的数据。

原因分析

基于<>对LIMIT+OFFSET实现原理的解释可知MySQL引擎层实际上是将offset与limit相加后的所有记录发送至服务器层之后服务器层会过滤掉前offset条记录并返回最后limit条结果给客户端显然这种设计导致了对数据库 immense pressure 并带来了 data transmission 中 resource 的消耗

优化方法

(1)子查询优化

复制代码
    select * 
    from student t1, (select id from student order by id limit 200000,10) t2 
    where t1.id=t2.id;

很多文章指出这种优化主要得益于SELECT语句仅选择ID单一字段,并遵循了覆盖索引原则。因此,在这种情况

全部评论 (0)

还没有任何评论哟~