随着数据量的增长,分页数量自然也越来越多,可以通过子查询的方式提升分页效率。在基本查询的基础上,先通过一个子查询检索出该页的起始主键ID,然后作为主查询WHERE语句条件进行再次检索。
SELECT * FROM table WHERE id > (SELECT id FROM table LIMIT offset, 1) LIMIT size;
JOIN分页
使用JOIN语句进行关联查询,同样可以达到分页的效果,而且当数据量过多时,比基本分页效率更高。
SELECT * FROM table AS t1 JOIN (SELECT id FROM table LIMIT offset, 1) AS t2 WHERE t1.id >= t2.id LIMIT size;
原因
- 子查询和JOIN关联查询类似,都是优先走一次子查询,实测耗时情况也差不多;
- 子查询通常是在索引上完成,而普通分页查询是在数据文件上完成,索引文件通常要比数据文件小得多,所以操作起来更快;