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 05 MySQL
mysql知识点整理
Apr 05 MySQL
多表查询、事务、DCL
Apr 05 MySQL
Mysql基础知识点汇总
May 26 MySQL
详解MySQL集群搭建
May 26 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
SQL实战演练之网上商城数据库商品类别数据操作
Oct 24 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 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计算页面执行时间的实现代码
2013/06/18 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
JavaScript中的类继承
2010/11/25 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
浅谈js闭包理解
2019/03/28 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
py中的目录与文件判别代码
2008/07/16 Python
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python中对列表排序实例
2015/01/04 Python
python分析apache访问日志脚本分享
2015/02/26 Python
python2.7实现爬虫网页数据
2018/05/25 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
学生个人自我鉴定
2014/03/26 职场文书
干部个人对照检查材料
2014/08/25 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
导游词之河北野三坡
2019/12/11 职场文书