MySQL 分页优化
1.普通翻页 limit
SELECT id FROM page_test_t ORDER BY id LIMIT 1000,10
例如:limit 1000,10 ,会从数据文件中查询1010 行记录,只返回的10记录,前1000行记录会被抛弃掉。
2.延迟关联
作为子查询或视图 自关联
适合前后翻页、跳页
可以先按照条件分页查询出主键,然后根据主键的再去关联表,查询出所有需要列的记录数,这样可以避免扫描太多的数据页。按照要求条件,可以写出这样的例子 SQL:
SELECT SQL_NO_CACHE a.* FROM `page_test_t` a,(SELECT id FROM page_test_t ORDER BY id LIMIT 600000,10) b WHERE a.id=b.id ORDER BY a.id ;
3.书签记录
使用id自增的特性
适合前后翻页
“书签记录”指我们可以用一个临时变量来存储上一次取数记录的位置,然后在获取下一页的时候,可以根据这个值,来获取大于这个值的下一页记录(上一页类似),直接从该值以后开始扫描。例如,假设我们上一次获取到了分页 limit 599990,10 的记录,最大的值的id为 1690344
(这里的值作为了一个书签记录),则我们获取 limit 600000,10 的记录可以这样写:
SELECT SQL_NO_CACHE * FROM `page_test_t` where id>1690344 ORDER BY id LIMIT 10 ;
链接指路:从官方文档中探索MySQL分页的几种方式及分页优化 - kanlon - 博客园 (cnblogs.com)