MySQL深分页性能差的根源是OFFSET大时需扫描大量无用行,优化应采用基于主键/唯一索引的游标分页(如WHERE id > 125 ORDER BY id LIMIT 20)或覆盖索引+延迟关联,确保ORDER BY字段有合适索引,避免函数、跨索引排序及无索引字段分页。

MySQL分页查询性能差,核心问题不在LIMIT本身,而在于OFFSET过大时需扫描大量无用行。优化的关键是避免全表/全索引扫描跳过前N行,改用基于游标的“无状态分页”或覆盖索引+延迟关联。
替代LIMIT 10000,20这类深分页,改用上一页最后一条记录的主键值作为下一页起点:
SELECT id,name,created_at FROM user ORDER BY id LIMIT 20
SELECT id,name,created_at FROM user WHERE id > 125 ORDER BY id LIMIT 20
当必须支持任意页码跳转(如后台管理),且排序字段非主键时:
基于PHP+MYSQL开发,除了网上书店必备的商品管理、配送支付管理、订单管理、会员分组、会员管理、查询统计和多项商品促销功能,还具有完整的文章、图文、下载、单页、广告发布等网站内容管理功能。系统具有静态HTML生成、UTF-8多语言支持、可视化模版引擎等技术特点,支持多频道调用不同模版和任意设置频道首页,适合建立各种规模的网上书店。系统具有以下主要功能模块: 网站参数设置 - 对网站的一些参数进
3
SELECT id FROM user ORDER BY created_at DESC LIMIT 10000,20
SELECT u.* FROM user u INNER JOIN (SELECT id FROM user ORDER BY created_at DESC LIMIT 10000,20) t ON u.id = t.id
INDEX idx_created_id (created_at, id)),让子查询能走索引扫描SELECT *直接分页,减少IO和网络传输量这些写法会彻底失效索引或加剧性能问题:
ORDER BY UPPER(name) → 索引失效WHERE status=1 ORDER BY created_at → 可能触发filesortORDER BY description → 全表扫描不可避免ORDER BY uuid → 索引物理顺序无意义,分页效率极低结合业务场景进一步压降开销:
Rows_examined远大于Rows_sent的分页SQLWINDOW FUNCTION配合ROW_NUMBER(),但大数据量下仍不如游标方案高效以上就是mysql如何优化分页查询_mysql分页查询性能优化的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号