浅谈MySQL分页Limit的性能问题
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,MySQL的分页查询通常通过limit来实现。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。为了与Pos
千家信息网最后更新 2025年02月01日浅谈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安全错误
数据库的锁怎样保障安全
数据库的表内数据
派诺集团互联网科技公司
网络安全知识 小学
单片机能使用数据库吗
车展网络技术服务合同
安装织梦无法连接数据库连接
网络安全文明处室材料
服务器架设dnf
跑跑卡丁车手游龙之遗迹服务器
联想服务器配置带外管理
redis 数据库
服务器电源风扇声音大
三公开船软件开发
cmo管理软件开发商
服务器安全维护技巧
服务器存储有点倾斜
中金公司软件开发怎么样
江苏应用软件开发哪家好
网络安全规范中专业人员如何分配
通辽管理软件开发
数据库怎样查询数据的前一条数据
数据库开发人员的工作环境
软件开发合同术语说明
文件怎么连接打开本地数据库
易易互联网科技有限公司
服务器管理员职责分离
qqzeng ip数据库
浙江义乌软件开发公司
盐城海航软件开发推荐咨询
公安当网络安全工资多少