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 pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL 分页查询的优化技巧
May 12 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL sql模式设置引起的问题
May 15 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 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
第四节--构造函数和析构函数
2006/11/16 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
python两种遍历字典(dict)的方法比较
2014/05/29 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python多进程读图提取特征存npy
2019/05/21 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
大学毕业生简单自荐信
2013/11/05 职场文书
2014信息公开实施方案
2014/02/22 职场文书
寄语是什么意思
2014/04/10 职场文书
养成教育经验材料
2014/05/26 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书