Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >性能优化-Limit查询的优化

性能优化-Limit查询的优化

作者头像
cwl_java
发布于 2020-02-13 04:54:27
发布于 2020-02-13 04:54:27
96000
代码可运行
举报
文章被收录于专栏:cwl_Javacwl_Java
运行总次数:0
代码可运行

5、Limit查询的优化

Limit常用于分页处理,时长会伴随order by从句使用,因此大多时候回使用Filesorts这样会造成大量的IO问题。 例子: 需求:查询影片id和描述信息,并根据主题进行排序,取出从序号50条开始的5条数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select film_id,description from sakila.film order by title limit 50,5;

执行的结果:

在查看一下它的执行计划:

对于这种操作,我们该用什么样的优化方式了? 优化步骤1: 使用有索引的列或主键进行order by操作,因为大家知道,innodb是按照主键的逻辑顺序进行排序的。可以避免很多的IO操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select film_id,description from sakila.film order by film_id limit 50,5;

查看一下执行计划

那如果我们获取从500行开始的5条记录,执行计划又是什么样的了?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
explain select film_id,description from sakila.film order by film_id limit 500,5\G

随着我们翻页越往后,IO操作会越来越大的,如果一个表有几千万行数据,翻页越后面,会越来越慢,因此我们要进一步的来优化。

优化步骤2 记录上次返回的主键, 在下次查询时使用主键过滤。(说明:避免了数据量大时扫描过多的记录) 上次limit是50,5的操作,因此我们在这次优化过程需要使用上次的索引记录值,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select film_id,description from sakila.film  where film_id >55 and film_id<=60 order by film_id limit 1,5;

查看执行计划:

结论:扫描行数不变,执行计划是很固定,效率也是很固定的

注意事项: 主键要顺序排序并连续的,如果主键中间空缺了某一列,或者某几列,会出现列出数据不足5行的数据;如果不连续的情况,建立一个附加的列index_id列,保证这一列数据要自增的,并添加索引即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mysql 常用查询性能优化
对于大多数中小型应用,最多和最明显的的性能问题应该是出自最底层的数据库,数据库的性能又很复杂,SQL优化,索引等等,
phoenix.xiao
2020/08/06
1.1K0
MySQL性能优化(七):MySQL执行计划,真的很重要,来一起学习吧
一条SQL被一个懵懂的少年,一阵蹂躏,扔向了MySQL服务器的尽头,少年苦苦等待,却迟迟等不来那满载而归的硕果。于是少年气愤,费尽苦心想从度娘那边寻求帮助,面对执行计划EXPLAIN,却等来的是无尽的折磨与抓狂。
xcbeyond
2020/05/14
5.5K0
MySQL优化原理
前言 说起MySQL的查询优化,相信大家收藏了一堆:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理? 在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。 一、MySQL逻辑架构    如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。
用户1195962
2018/01/18
1.1K0
MySQL优化原理
MySql查询性能优化
在访问数据库时,应该只请求需要的行和列。请求多余的行和列会消耗MySql服务器的CPU和内存资源,并增加网络开销。 例如在处理分页时,应该使用LIMIT限制MySql只返回一页的数据,而不是向应用程序返回全部数据后,再由应用程序过滤不需要的行。 当一行数据被多次使用时可以考虑将数据行缓存起来,避免每次使用都要到MySql查询。 避免使用SELECT *这种方式进行查询,应该只返回需要的列。
lyb-geek
2018/07/26
2.1K0
分析查询语句EXPLAIN详解,一步一步带你了解字段的含义
最近面试过程中问了MySQL的Explain的使用,问了:Explain你最关注哪些字段?
小熊学Java
2024/04/11
7920
分析查询语句EXPLAIN详解,一步一步带你了解字段的含义
三高Mysql - Mysql索引和查询优化(偏实战部分)
实战部分挑选一些比较常见的情况,事先强调个人使用的是mysql 8.0.26,所以不同版本如果出现不同测试结果也不要惊讶,新版本会对于过去一些不会优化的查询进行优化。
阿东
2022/04/08
7850
三高Mysql - Mysql索引和查询优化(偏实战部分)
【说站】mysql中LIMIT分页如何优化
1、使用覆盖索引扫描,而不是查询所有的列。然后根据需要做一次关联查询再返回所有的列。
很酷的站长
2022/11/23
9990
性能优化-group by的优化
说明:从上面的执行计划来看,这种优化后的方式没有使用临时文件和文件排序的方式了,取而代之的是使用了索引。查询效率老高了。
cwl_java
2020/02/13
1.9K0
MySQL关键字Explain 性能优化神器
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈。在select语句之前增加explaion关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行SQL。
星哥玩云
2022/08/18
9220
MySQL关键字Explain 性能优化神器
深入解析:从源码窥探MySQL优化器
作者 | 汤爱中,云和恩墨SQM开发者,Oracle/MySQL/DB2的SQL解析引擎、SQL审核与智能优化引擎的重要贡献者,产品广泛应用于金融、电信等行业客户中。
数据和云
2018/12/29
2.2K0
深入解析:从源码窥探MySQL优化器
三高Mysql - Mysql索引和查询优化(偏理论部分)
内容为慕课网的"高并发 高性能 高可用 MySQL 实战"视频的学习笔记内容和个人整理扩展之后的笔记,本节内容讲述的索引优化的内容,另外本部分内容涉及很多优化的内容,所以学习的时候建议翻开《高性能Mysql》第六章进行回顾和了解,对于Mysql数据的开发同学来说大致了解内部工作机制是有必要的。
阿东
2022/04/08
4830
三高Mysql - Mysql索引和查询优化(偏理论部分)
MySQL调优之查询优化
一般情况下,查询可以看成按如下顺序执行任务:由客户端向服务端发起查询请求,然后在服务器端进行解析,生成执行计划,执行,最后将结果返回给客户端。
行百里er
2020/12/02
1.1K0
MySQL调优之查询优化
Mysql基础篇--面试sql优化
3.匹配最左前缀匹配,仅仅对索引中最左列进行查询,比如复合索引 col1+col2+col3 ,使用索引的是 col1+col2,col1+col3,col1+col2+col3,不会使用索引的是col2+col3,col2.
小土豆Yuki
2020/06/15
8130
MySQL优化特定类型的查询(书摘备查)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53907619
用户1148526
2019/05/25
1.5K0
为什么 EXISTS(NOT EXIST) 与 JOIN(LEFT JOIN) 的性能会比 IN(NOT IN) 好
网络上有大量的资料提及将 IN 改成 JOIN 或者 exist,然后修改完成之后确实变快了,可是为什么会变快呢?IN、EXIST、JOIN 在 MySQL 中的实现逻辑如何理解呢?本文也是比较粗浅的做一些介绍,知道了 MySQL 的大概执行逻辑,也方便理解。本书绝大多数内容来自:高性能MySQL第三版(O'Reilly.High.Performance.MySQL.3rd.Edition.M),还有一部分来自于网络,还有的来自于自己的理解,以下的内容有引用的都会做标准,如有雷同,纯属巧合。
用户3148308
2018/10/10
6.8K0
【数据库】MySQL查询优化
在这个快速发展的时代,时间变得 越来越重要,也流逝得非常得快,有些人长大了,有些人却变老了。稍不留神,2019已经过完了三分之一。回首这四个月收获什么,懂得了什么?欢迎留言分享给我哟。
用户3467126
2019/07/03
14K0
相关推荐
Mysql 常用查询性能优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验