Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL快速分页查询优化

MySQL快速分页查询的优化方案

作者:hellotutu

本文主要介绍了传统分页方法的性能瓶颈,并详细阐述了五种优化方案:基于游标的分页、覆盖索引优化、子查询优化、延迟关联和预计算分页数据,通过性能对比,展示了不同方法在不同场景下的适用性,并指出了使用这些优化方案时需要注意的事项,需要的朋友可以参考下

‌一、传统分页的问题

LIMIT OFFSET性能瓶颈‌
当查询SELECT * FROM table LIMIT N OFFSET M时,MySQL需要扫描前M+N行数据,丢弃前M行,导致偏移量越大性能越差,尤其在百万级数据场景下延迟显著

‌二、优化方案‌

‌ 1. 基于游标的分页(Cursor-based Pagination)‌

-- 第一页
SELECT * FROM table ORDER BY id DESC LIMIT 10;

-- 第二页(假设上一页最后一条id=100)
SELECT * FROM table WHERE id < 100 ORDER BY id DESC LIMIT 10;

2. 覆盖索引优化(Covering Index)‌

-- 普通分页(慢)
SELECT * FROM table ORDER BY id LIMIT 100000, 10;

-- 覆盖索引优化(快)
SELECT * FROM table 
INNER JOIN (SELECT id FROM table ORDER BY id LIMIT 100000, 10) AS tmp 
USING (id);

‌3. 子查询优化‌

SELECT * FROM table 
WHERE id >= (SELECT id FROM table ORDER BY id LIMIT 100000, 1)
ORDER BY id LIMIT 10;

4. 延迟关联(Deferred Join)‌

SELECT * FROM table 
INNER JOIN (SELECT id FROM table ORDER BY id LIMIT 100000, 10) AS tmp 
ON table.id = tmp.id;

5. 预计算分页数据‌

三、性能对比‌

方法百万数据耗时(示例)百万数据耗时(示例)
LIMIT OFFSET2.5s小偏移量(OFFSET < 1000)
游标分页‌ 0.01s按有序字段分页)
‌覆盖索引优化0.1s仅需索引列的分页
‌子查询优化0.2s大偏移量分页)

四、注意事项‌

1‌、索引设计‌

2、数据一致性‌

3、业务适配‌

五、总结‌

以上就是‌MySQL快速分页查询的优化方案的详细内容,更多关于‌MySQL快速分页查询优化的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文