MySQL 原理与优化之Limit 查询优化


Posted in MySQL onAugust 14, 2022

MySQL 原理与优化之Limit 查询优化

假设有表tb_sku,其表结构如下:

MySQL 原理与优化之Limit 查询优化

表中大约有200w条记录,执行如下的sql 语句大约 4.36s 返回数据

select count(*) from tb_sku;

MySQL 原理与优化之Limit 查询优化

接着我们使用 对其进行分页查找:

select * from tb_sku limit 0,10;

limit 语句 其中0 代表起始位置,10 为每页返回的数据数量。

MySQL 原理与优化之Limit 查询优化

如上图所示,很快就返回了查询结果。

接着我们再使用SQL 语句

select * from tb_sku limit 10,10;

语句从记录位置10的位置开始再往下返回10 条记录,也就是第二页的信息。其返回时间也是比较快。

然后,我们加大起始位置 到100w如下:

select * from tb_sku limit 1000000,10;

MySQL 原理与优化之Limit 查询优化

此时返回时间需要0.74 s,这说明了使用limit 对大数据量的表进行分页,位置越靠后效率越低。拿上面的例子来说,limit 会先对 100w 的数据进行排序,然后再返回10 条数据,而且仅仅返回100w 到 100w 零10条 的记录,其他查询的记录都会丢弃掉,这种做法查询排序的代价非常大。

由此我们需要对大数据量表进行limit 操作进行优化,官方给出的方案是通过覆盖索引和子查询的方式进行优化

根据这个思路首先对id 进行查询:

select id from tb_sku order by id limit 1000000,10;

MySQL 原理与优化之Limit 查询优化

查询结果就只需要0.34s 比之前的0.74s要快多了。究其原因,因为直接返回id的信息,并没有进行回表操作,所以速度别select * 要快

由于我们需要获得select * 的信息,也就是tb_user 所有字段的信息,因此需要将上面的查询结果和tb_user 进行jion 操作。

select s.* from tb_sku s ,(select id from tb_sku order by id limit 1000000,10 ) t where s.id = t.id;

MySQL 原理与优化之Limit 查询优化

这里通过查询id 和子查询 的方式将查询结果缩短为 0.38s,比之前直接通过 select * 的方式要缩短一倍的查询时间。

到此这篇关于MySQL 原理与优化之Limit 查询优化的文章就介绍到这了,更多相关MySQL Limit 优化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL主从复制断开的常用修复方法
Apr 07 MySQL
详解MySQL连接挂死的原因
May 18 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MySQL Router实现MySQL的读写分离的方法
May 27 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
MySQL分库分表详情
Sep 25 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
mysql 获取相邻数据项
May 11 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 #MySQL
mysql函数之截取字符串的实现
Aug 14 #MySQL
MySQL 原理与优化之原数据锁的应用
MySql按时,天,周,月进行数据统计
Aug 14 #MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 #MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 #MySQL
MySQL数据库查询之多表查询总结
Aug 05 #MySQL
You might like
建立动态的WML站点(二)
2006/10/09 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
python中zip和unzip数据的方法
2015/05/27 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
详解python中的Turtle函数库
2018/11/19 Python
Python3实现二叉树的最大深度
2019/09/30 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
Django日志及中间件模块应用案例
2020/09/10 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
酒店值班经理的工作职责范本
2014/02/18 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
商铺门前三包责任书
2014/07/25 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
继承权公证书范本
2015/01/23 职场文书
讲解MySQL增删改操作
2022/05/06 MySQL