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 相关文章推荐
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
MySQL数据库简介与基本操作
May 30 MySQL
MySQL索引失效十种场景与优化方案
May 08 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 日常开发小技巧
2009/09/23 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
php json相关函数用法示例
2017/03/28 PHP
永不消失的title提示代码
2007/02/15 Javascript
JS 对象介绍
2010/01/20 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Python Socket编程详细介绍
2017/03/23 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
我的小天地教学反思
2014/04/30 职场文书
音乐节策划方案
2014/06/09 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
工作试用期自我评价
2015/03/10 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
Python超详细分步解析随机漫步
2022/03/17 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python