在日常的项目开发中,大多数场景,我们采用MYSQL作为持久层存储,但是随着数据量的增加,数据的分页查询效率将会极具的下降,那么我们该如何的进行优化分页查询呢?接下来我将介绍三种,供大家学习。
普通分页
语句
SELECT * FROM table_name WHERE deleted = 0 LIMIT pageNum, pageSize;
场景
这种分页适用于数据量较小的场景,数据量在数百条或者数千条是效果良好。
优点
使用简单,且市面上有大量的插件支持。
缺点
在分页的时候会进行全表扫描,并且存在返回数据结果排序不稳定情况。
主键分页
SELECT * FROM table_name WHERE deleted = 0 AND id > (pageNum * pageSize) LIMIT pageSize;
场景
适用于数据量较大场景。
优点
通过索引扫描进行分页,速度快。
缺点
并不是按照ID进行排序,可能会出现查询漏掉部分数据。
子查询分页
SELECT * FROM table_name WHERE id <= (SELECT id FROM table_name ORDER BY id desc LIMIT pageNum * pageSize ORDER BY id desc LIMIT pageSize ;
场景
适用于数据量较大场景。
优点
通过先查询id,避免回表过程,增加查询效率,在此对id进行联合查询触发主键索引,提升查询效率。
缺点
需要联合查询,SQL略显复杂。