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 05 MySQL
Mysql - 常用函数 每天积极向上
Apr 05 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
mysql脏页是什么
Jul 26 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
MySQL优化及索引解析
Mar 17 MySQL
MySQL 数据 data 基本操作
May 04 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 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中cookies使用指南
2007/03/16 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
一个JS翻页效果
2007/07/23 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python实现排序算法解析
2018/09/08 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
车间操作工岗位职责
2013/12/19 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
个人工作总结范文2014
2014/11/07 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python