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之DML语言
Apr 05 MySQL
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
MySQL实现字段分割一行转多行的示例代码
Jul 07 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
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python fileinput模块使用实例
2015/05/28 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
办公用房租赁协议书
2014/11/29 职场文书
党校学习党性分析材料
2014/12/19 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
小学运动会入场口号
2015/12/24 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
导游词之镇江焦山
2019/11/21 职场文书
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技