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 可扩展设计的基本原则
May 14 MySQL
MySQL 8.0 Online DDL快速加列的相关总结
Jun 02 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
Mar 17 MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
Mar 23 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
python 运算符 供重载参考
2009/06/11 Python
使用Scrapy爬取动态数据
2018/10/21 Python
从0开始的Python学习016异常
2019/04/08 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
python web框架中实现原生分页
2019/09/08 Python
python关于倒排列的知识点总结
2020/10/13 Python
python Scrapy框架原理解析
2021/01/04 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
苹果中国官方网站:Apple中国
2016/07/22 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
农救科工作职责
2013/11/27 职场文书
大学社团活动策划书
2014/01/26 职场文书
六查六看剖析材料
2014/02/15 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
MySQL transaction事务安全示例讲解
2022/06/21 MySQL