浅谈MySQL分页Limit的性能问题
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,MySQL的分页查询通常通过limit来实现。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。为了与Pos
千家信息网最后更新 2026年11月03日浅谈MySQL分页Limit的性能问题
MySQL的分页查询通常通过limit来实现。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。为了与PostgreSQL兼容,limit也支持limit # offset #。
问题:
对于小的偏移量,直接使用limit来查询没有什么问题,但随着数据量的增大,越往后分页,limit语句的偏移量就会越大,速度也会明显变慢。
优化思想:避免数据量大时扫描过多的记录
解决:子查询的分页方式或者JOIN分页方式。JOIN分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。
下面举个例子。一般MySQL的主键是自增的数字类型,这种情况下可以使用下面的方式进行优化。
以真实的生产环境的6万条数据的一张表为例,比较一下优化前后的查询耗时:
-- 传统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,则使用子查询的分页方式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
查询
数据
方式
文件
时间
索引
偏移
内容
影响
问题
参数
字段
效率
支持
性能
明显
普通
有效
一致
万条
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
哈尔滨大商圈互联网科技有限公司
科技赋能下的互联网金融
易互联网科技有限公司
致骋互联网科技
小马过河互联网科技
互联网金融科技平台
金融科技和互联网金融
老年人脱离互联网科技的作文
河南猎农互联网科技有限公司
岳阳华臻互联网科技有限公司
无锡工业互联网科技有限公司
互联网方面的科技前沿
2021互联网科技公司排名
半导体是互联网高科技吗
抖集互联网科技技术咨询
张家口科技产业互联网平台
数字互联网科技有限公司
深圳互联网科技园地址
现代互联网科技公司
保山浩联互联网科技有限公司
咖啡
科技平台互联网
互联网科技未来
互联网科技金融公司
浩特互联网科技
狮子座互联网科技有限公司
米客互联网科技
互联网营销推广黑科技
互联网科技包装股份有限公司上市
中国新注册互联网科技