MySQL分页查询limit优化的两种思路

MySQL分页查询limit优化的两种思路我们知道 limit 分页 当翻到比较靠后的页时 查询效率会越来越慢 如这则帖子所述 浅谈 PageHelper 插件分页实现原理及大数据量下 SQL 查询效率问题解决博主这也是一种不错的思路 其实针对分页这个问题 了解其为什么慢就知道优化方法了 按我的理解如下 不一定说的很准确哈 1 以前 select fromtableord 10 这种方式 分页是怎么分的呢 是从磁盘拿整一个数据页到存储引擎缓冲区 比如 limit100 10 那就要按顺序先取出前 100 条

我们知道,limit分页,当翻到比较靠后的页时,查询效率会越来越慢。如这则帖子所述:

浅谈PageHelper插件分页实现原理及大数据量下SQL查询效率问题解决

博主这也是一种不错的思路。其实针对分页这个问题,了解其为什么慢就知道优化方法了,按我的理解如下(不一定说的很准确哈):

(1)以前select * from table order by column limit 100, 10这种方式,分页是怎么分的呢,是从磁盘拿整一个数据页到存储引擎缓冲区,比如 limit 100, 10 那就要按顺序先取出前100条数据,跳过了offset后再拿出第[100,110]这10条数据,如果这条数据字段很多且体积比较大,那么数据页就会比较大,我们知道存储引擎内存页大小是有限制的,如果数据页较大,那可能一次内存页只能存一两条数据,那么每次磁盘IO只能取到一两条,所以要翻掉前100条,那就可能需要非常多次的IO,这就是为什么慢的原因。

(2)针对上述问题,主要有两种优化思路,第一种就是针对“按顺序取前100条”这个问题,那我是不是可以不用取完前面100条就能拿到第[100,110]条呢?方法的话比如改造limit 100,10这个sql,用where id > 100 limit 10,这样的话可以按 id 主键索引先定位到哪个磁盘数据页,然后按顺序取10条数据就好了。

(3)第二种思路是针对“取大数据页到内存进行过滤”的问题,那我能不能把数据页做小,使得一个内存页能容纳更多条数据,从而减少磁盘IO次数?又或者我直接通过索引页来过滤,这样就不需要用原数据页来进行内存计算?这就是类似博主所述的方法,就是通过select id from table limit 100,10先分页查出id,再回表查询将这10个id的数据取出来就好了,因为id是主键索引,所以拿id来内存计算,就比拿一整页数据计算,IO次数要少的多了(甚至,存储引擎可能把id索引页都缓存到cache中了的话,压根都不需要硬盘IO了)。此外,order by的字段尽量要是索引字段,比如order by id,所以建表的时候考虑到要分页查询的话,尽量保证id的自增序就是分页的顺序/逆序,这样分页排序就能直接order by id了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212547.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:48
下一篇 2026年3月18日 下午7:49


相关推荐

  • mysql longtext 超时_限制MySQL SELECT结果中longtext字段的长度?

    mysql longtext 超时_限制MySQL SELECT结果中longtext字段的长度?您可以使用SUBSTRING()MySQL来限制字符串的长度。语法如下SELECTSUBSTRING(yourColumnName,1,yourIntegerValueToGetTheCharacters)asanyVariableNamefromyourTableName;为了理解上述语法,让我们创建一个表。创建表的查询如下mysql>createtablelimitLeng…

    2022年5月15日
    49
  • typescript web_typescript文档

    typescript web_typescript文档前言上一篇我们讲到如何手动编译TypeScript,如果我们每次都要手动编译,那么这样会很累,接下来就介绍自动编译TypeScript。mac自动编译typescript在Typescript文

    2022年7月29日
    9
  • WPScan基本使用

    WPScan基本使用WPScan 基本使用 WPScan 简介 WPScan 参数 WPScan 扫描指定站点 WPScan 扫描指定用户 WPScan 扫描插件漏洞 WPScan 扫描主题漏洞 WPScan 更新数据漏洞库 WPScan 暴力激活成功教程得到密码 WPScanTimThu 文件漏洞扫描 WordPress 防护措施 WPScan 简介 WPScan 是 KaliLinux 默认自带的一款漏洞扫描工具 它采用 Ruby 编写 能够扫描 WordPress 网站中的多种安全漏洞 其中包括 WordPress 本身的漏洞 插件漏洞和主题漏洞 最新版本

    2026年3月19日
    2
  • 六种进程间通信方式[通俗易懂]

    六种进程间通信方式[通俗易懂]前言开场小故事炎炎夏日,张三骑着单车去面试花了1小时,一路上汗流浃背。结果面试过程只花了5分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波1小时回去。面试五分钟,骑车两小时。你看,张三因面试没准备好,吹空调的时间只有…

    2022年10月11日
    5
  • 爬虫基本知识,如何发起请求,进行分析

    爬虫基本知识,如何发起请求,进行分析爬虫基础知识爬虫一个实战性很强的内容,下面是一些知识点,方便日后复习,具体还要去案例看看,随机应变。这是我的github爬虫仓库,欢迎大家clone进行学习和体验。一.网络爬虫概述定义网络蜘蛛(spider)、网络机器人(robot),抓取网络数据的程序其实就是用Python程序模仿人点击浏览器并访问网站,而且模仿的越像越好,让Web站点无法发现你不是人爬取数据的目的1、公司项目测试数据2、公司业务部门及其他部门所需数据3、数据分析企业获取数据方式1、公司自有数据2、第三方

    2022年10月3日
    1
  • Kimi爆火,月之暗面估值冲到180亿美元,不到3个月翻了4倍!

    Kimi爆火,月之暗面估值冲到180亿美元,不到3个月翻了4倍!

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号