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 相关文章推荐
52条SQL语句教你性能优化
May 25 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL Server 层四个日志
Mar 31 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 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输出Excel文件类
2010/02/08 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
php调用C代码的实现方法
2014/03/11 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
Javascript - HTML的request类
2007/01/09 Javascript
类之Prototype.js学习
2007/06/13 Javascript
use jscript Create a SQL Server database
2007/06/16 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
python下10个简单实例代码
2017/11/15 Python
对Python 内建函数和保留字详解
2018/10/15 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
内业资料员岗位职责
2014/01/04 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
销售冠军获奖感言
2014/02/03 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
演讲稿开场白台词
2014/08/25 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书