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 07 MySQL
mysql的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL如何构建数据表索引
May 13 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
数据设计之权限的实现
Aug 05 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php 进度条实现代码
2009/03/10 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
Angular2库初探
2017/03/01 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
Python程序控制语句用法实例分析
2020/01/14 Python
python 如何调用 dubbo 接口
2020/09/24 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
JSF界面控制层技术
2013/06/17 面试题
会计应聘求职信范文
2013/12/17 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
教师节联欢会主持词
2015/07/04 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL