mysql分页时offset过大的Sql优化经验分享
发布时间 - 2026-01-11 02:40:37 点击率:次发现问题

当我们展示一个列表中的内容时,难免会遇到分页问题,因为列表中的内容数量可能很多,但是用户能一次看到的界面大小是有限的,不可能一个界面展示所有的内容,从后端一次性取太多的数据也会给后端造成额外的压力。
通常分页查询的时候会使用这样的语句:
SELECT * FROM table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000
当offset特别大时,这条语句的执行效率会明显减低,而且效率是随着offset的增大而降低的。
原因为:
MySQL并不是跳过offset行,而是取offset+N行,然后返回放弃前offset行,返回N行,当offset特别大,然后单条数据也很大的时候,每次查询需要获取的数据就越多,自然就会很慢。
优化方案:
SELECT * FROM table JOIN (select id from table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000) as tmp using(id)
或者
SELECT a.* FROM table a, (select id from table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000) b where a.id = b.id
先获取主键列表,再通过主键查询目标数据,即使offset很大,也是获取了很多的主键,而不是所有的字段数据,相对而言效率会提升很多。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# mysql
# 分页
# offset
# sql
# 分页sql
# MySql分页时使用limit+order by会出现数据重复问题解决
# 为什么MySQL分页用limit会越来越慢
# mysql分页的limit参数简单示例
# 浅谈MySQL分页Limit的性能问题
# MySQL分页Limit的优化过程实战
# mysql分页性能探索
# 浅析Oracle和Mysql分页的区别
# SpringMVC+Mybatis实现的Mysql分页数据查询的示例
# 利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解
# MySQL分页分析原理及提高效率
# MySQL优化案例系列-mysql分页优化
# 你应该知道的PHP+MySQL分页那点事
# MYSQL分页limit速度太慢的优化方法
# MySQL分页优化
# MySQL分页技术、6种分页方法总结
# 8种MySQL分页方法总结
# mysql分页原理和高效率的mysql分页查询语句
# MySQL的几种分页方式
# 你知道几种方式
# 主键
# 后端
# 就会
# 不可能
# 太多
# 列表中
# 这条
# 越多
# 当我们
# 会给
# 这篇文章
# 谢谢大家
# 很慢
# 跳过
# 单条
# 而不是
# 有疑问
# brush
# SELECT
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何在建站之星网店版论坛获取技术支持?
北京企业网站设计制作公司,北京铁路集团官方网站?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
详解Android——蓝牙技术 带你实现终端间数据传输
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel中的withCount方法怎么高效统计关联模型数量
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
大学网站设计制作软件有哪些,如何将网站制作成自己app?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
javascript中闭包概念与用法深入理解
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
米侠浏览器网页背景异常怎么办 米侠显示修复
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何在服务器上三步完成建站并提升流量?
如何快速建站并高效导出源代码?
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何实现数据库事务?(DB Facade示例)
Laravel怎么连接多个数据库_Laravel多数据库连接配置
JS碰撞运动实现方法详解
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何处理异常和错误?(Handler示例)
javascript基于原型链的继承及call和apply函数用法分析
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何在企业微信快速生成手机电脑官网?
微信公众帐号开发教程之图文消息全攻略
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel Docker环境搭建教程_Laravel Sail使用指南
微信小程序 wx.uploadFile无法上传解决办法
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何在Windows虚拟主机上快速搭建网站?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
JS实现鼠标移上去显示图片或微信二维码
BootStrap整体框架之基础布局组件
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
三星网站视频制作教程下载,三星w23网页如何全屏?

