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 08 MySQL
MySQL update set 和 and的区别
May 08 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
mysql创建存储过程及函数详解
Dec 04 MySQL
MySQL日期时间函数知识汇总
Mar 17 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
MySQL索引 高效获取数据的数据结构
May 02 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
PHP DataGrid 实现代码
2009/08/12 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
Yii2如何批量添加数据
2016/05/17 PHP
javascript中的对象创建 实例附注释
2011/02/08 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
vue2.0 路由模式mode="history"的作用
2018/10/18 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
用js简单提供增删改查接口
2019/05/12 Javascript
JS实现星星海特效
2019/12/24 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
flask框架视图函数用法示例
2018/07/19 Python
python进行参数传递的方法
2020/05/12 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
快餐店的创业计划书范文
2014/01/29 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
青涩记忆观后感
2015/06/18 职场文书
导游词之桂林
2019/08/20 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
Python+Appium实现自动抢微信红包
2021/05/21 Python
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
Mysql开启外网访问
2022/05/15 MySQL