罗田县升平网络工作室,一家专业从事网站建设的工作室

资讯论坛

 找回密码
 加入论坛

快捷登录

回帖中禁止出现的内容,违者将被直接永久禁止访问,删除ID处理 :1.违反法律法规 ,包括但不限于出现带有政治、色情、暴恐信息等内容;2.恶意攻击内容,包括但不限于:恶意攻击党和政府、辱骂跟帖者、攻击主题发布者、不服从论坛管理、挑衅管理者、挑战版规等;3.广告、推广内容,尤其出现带有病毒、恶意代码、广告链接等内容,包括但不限于:QQ号、文字QQ号、微信号、手机号、文字手机号、第三方网址、单位公司名称、网站名称等;4.回帖贴出该主题隐藏资源链接或其它主题隐藏资源链接的行为。
查看: 659|回复: 0

浅谈MySQL分页Limit的性能问题

[复制链接]

669

主题

650

帖子

771

积分

社区达人

积分
771
发表于 2019-9-7 20:17:25 | 显示全部楼层 |阅读模式
MySQL的分页查询通常通过limit来实现。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。为了与PostgreSQL兼容,limit也支持limit # offset #。

问题:

对于小的偏移量,直接使用limit来查询没有什么问题,但随着数据量的增大,越往后分页,limit语句的偏移量就会越大,速度也会明显变慢。

优化思想:避免数据量大时扫描过多的记录

解决:子查询的分页方式或者JOIN分页方式。JOIN分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。

下面举个例子。一般MySQL的主键是自增的数字类型,这种情况下可以使用下面的方式进行优化。

以真实的生产环境的6万条数据的一张表为例,比较一下优化前后的查询耗时:
  1. -- 传统limit,文件扫描[SQL]SELECT * FROM tableName ORDER BY id LIMIT 50000,2;受影响的行: 0时间: 0.171s-- 子查询方式,索引扫描[SQL]SELECT * FROM tableNameWHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 50000 , 1)LIMIT 2;受影响的行: 0时间: 0.035s-- JOIN分页方式[SQL]SELECT * FROM tableName AS t1JOIN (SELECT id FROM tableName ORDER BY id LIMIT 50000, 1) AS t2WHERE t1.id <= t2.id ORDER BY t1.id LIMIT 2;受影响的行: 0时间: 0.036s
复制代码
可以看到经过优化性能提高了很多倍。

优化原理:

子查询是在索引上完成的,而普通的查询时在数据文件上完成的。通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。因为要取出所有字段内容,第一种需要跨越大量数据块并取出,而第二种基本通过直接根据索引字段定位后,才取出相应内容,效率自然大大提升。因此,对limit的优化,不是直接使用limit,而是首先获取到offset的id,然后直接使用limit size来获取数据。

在实际项目使用,可以利用类似策略模式的方式去处理分页。例如,每页100条数据,判断如果是100页以内,就使用最基本的分页方式;如果大于100,则使用子查询的分页方式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

来源:http://www.jb51.net/article/168192.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
打赏鼓励一下!
回复

使用道具 举报

回帖中禁止出现的内容,违者将被直接永久禁止访问,删除ID处理 :1.违反法律法规 ,包括但不限于出现带有政治、色情、暴恐信息等内容;2.恶意攻击内容,包括但不限于:恶意攻击党和政府、辱骂跟帖者、攻击主题发布者、不服从论坛管理、挑衅管理者、挑战版规等;3.广告、推广内容,尤其出现带有病毒、恶意代码、广告链接等内容,包括但不限于:QQ号、文字QQ号、微信号、手机号、文字手机号、第三方网址、单位公司名称、网站名称等;4.回帖贴出该主题隐藏资源链接或其它主题隐藏资源链接的行为。

浏览排行

(40324)2019-11-5 公共云钱包资金盘骗局揭秘: 网络传销+原始股骗局合体!

(23437)2019-12-20 12月17日 邓智天法院直播庭审疑问全解答!

(22040)2019-12-1 环保币GEC资金盘骗局最新消息: 即将崩盘!

(18260)2019-11-9 巨胸肥臀大长腿,嫩模糯美子真人COS不知火舞福利污图

(16843)2018-12-24 罗田县人民法院公布【第五批失信被执行人名单】 ...

(16039)2019-11-3 曝光!PTFX已经崩盘跑路,投资者血流成河!

(14104)2019-8-7 湖北电力网上缴费,支付宝绑定户号的初始密码是什么?

(13830)2018-10-17 罗田县人民政府“12345”市民服务热线服务指南

(12182)2019-12-11 公安定性了, 趣码是非法传销! 趣码怎么退回365元?

(12001)2019-12-15 满足你对女同事的幻想 风骚秘书阿朱销魂眼神勾魂摄魄

最新发表

[升平网络工作室]2026-4-17 罗田县开展“4·15”全民国家安全教育日宣传活动

[升平网络工作室]2026-4-17 法治护航青春 共建平安校园

[升平网络工作室]2026-4-17 [2026-04-17]罗田天气预报

[升平网络工作室]2026-4-16 罗田县2026年公开招聘中小学教师公告

[升平网络工作室]2026-4-16 [2026-04-16]罗田天气预报

[升平网络工作室]2026-4-16 周黎到胜利镇调研重点工作

[升平网络工作室]2026-4-15 总书记的人民情怀 | “走出一条中国特色城市现代化新路子”

[升平网络工作室]2026-4-15 [2026-04-15]罗田天气预报

[升平网络工作室]2026-4-15 汪湘云到匡河镇调研产业发展、库区整治等工作

[升平网络工作室]2026-4-14 [2026-04-14]罗田天气预报

QQ|Archiver|手机版|小黑屋|资讯论坛BBS.SPW8.CN ( 鄂ICP备2021011341号-3 )|网站地图


手机扫一扫继续访问
[免责声明]
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。

进入社区 | 发表新帖 | 百度收录 |
技术提供:罗田县升平网络工作室
站长Email:kefu@spw8.cn
投诉电话(刮开查看):15374567400

GMT+8, 2026-4-17 22:08 , Processed in 0.332834 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表