Limit查询的优化

Limit常用于分页处理,时长会伴随order by从句使用,因此大多时候回使用Filesorts这样会造成大量的IO问题。

例子:

需求:查询影片id和描述信息,并根据主题进行排序,取出从序号50条开始的5条数据。

select film_id,description from sakila.film order by title limit 50,5;

执行的结果:

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

对于这种操作,我们该用什么样的优化方式了?

优化步骤1:

使用有索引的列或主键进行order by操作,因为大家知道,innodb是按照主键的逻辑顺序进行排序的。可以避免很多的IO操作。

select film_id,description from sakila.film order by film_id limit 50,5;

查看一下执行计划

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

explain select film_id,description from sakila.film order by film_id limit 500,5\G

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

优化步骤2、记录上次返回的主键, 在下次查询时使用主键过滤。(说明:避免了数据量大时扫描过多的记录)

上次limit是50,5的操作,因此我们在这次优化过程需要使用上次的索引记录值,

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列,保证这一列数据要自增的,并添加索引即可。

数据库-优化-Limit查询的优化相关推荐

  1. mysql数据库根据时间查询的优化

    今天 数据库单表查询,根据时间段进行查询,百万级数据量查询速度很慢,所以记录一下解决方法. 1.尽量避免thisTime > startTime and thisTime < endTim ...

  2. mysql 架构优化_Mysql 架构及优化之-查询性能优化

    ①②③④⑤⑥⑦⑧⑨ 查询执行基础知识 mysql执行查询过程 ① 客户端将查询发送到服务器 ② 服务器检查查询缓存 如果找到了就从缓存返回结果 否则进行下一步 ③ 服务器解析,预处理和优化查询,生成执 ...

  3. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:rrd.me/fVJw6 前言 本文主要针对的是关 ...

  4. mysql空值判断怎么优化_MySQL查询语句优化的十个小技巧!

    前言 查询语句的优化是SQL效率优化的一个方式,可以通过优化sql语句来尽量使用已有的索引,避免全表扫描,从而提高查询效率.最近在对项目中的一些sql进行优化,总结整理了一些方法. 1.尽量避免在 w ...

  5. oracle 数据语句优化,oracle 查询语句优化录

    最近,因为发现以前使用的数据查询语句的效率越来越差,导致每次进行大量数据的操作都需要耗一个小时以上.这速度实在是太龟慢了,简直是无法忍受了.本人决定亲自拿把杀猪刀砍向它,好给它颜色瞧瞧.经过一系列的测 ...

  6. SQL优化(三) 查询条件优化

    1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理 ...

  7. mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

    [环境介绍] 云数据库MySQL 5.7 [背景描述] 业务需要:需要对16370077的表数据进行更新部分数据操作 UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE = ...

  8. mysql优化的几种方法_详解mysql数据库不同类型sql语句优化方法

    概述 分享一下之前笔记记录的一些不同类型sql语句优化方法,针对mysql. 主要分成优化INSERT语句.优化ORDER BY语句.优化GROUP BY 语句.优化嵌套查询.优化OR语句这几个方面, ...

  9. MySQL高级 —— 查询性能优化

    引言 承接<MySQL高级 -- 高性能索引>,本篇博客将围绕<高性能MySQL(第三版)>第六章内容进行总结和概括. 与索引的部分一样,SQL优化也是广大程序员深入MySQL ...

最新文章

  1. python中defaultdict()函数的介绍以及应用场景
  2. Keepalived全局配置
  3. 写给 Web 开发者的深度学习教程 - 向量化 矩阵
  4. linux下面使用飞书个人版预览doc
  5. Ubuntu 查看磁盘空间 及目录容量
  6. [转发] 老叶观点:MySQL开发规范之我见
  7. html搜索框如何加下拉框,js实现带搜索功能的下拉框
  8. linux查看php执行用户,在浏览器中打开php文件时,是Linux中的哪个用户执行的?...
  9. android学习心得之Activity
  10. ASCII码常用范围
  11. 【ECSHOP插件】ECSHOP会员头像,上传头像评论显示头像
  12. 发布QtCsv文件转语言翻译文件工具
  13. 有监督对比学习在分类任务中的应用 Supervised Contrastive Learning
  14. h5链接加上 vconsole_淘宝bp链接让你手动也可以像软件一样
  15. 1.4.4 Performance Measures
  16. pq: SSL is not enabled on the server
  17. Excel根据单元格内容分类并插入空行的方法
  18. 【开发者平台汇总】-各大平台开发者及开放平台集锦
  19. java发送get请求400解决
  20. 毕设经典-人事档案管理系统(layer+SSM)-AOP介绍

热门文章

  1. linux系统创建windows启动盘
  2. 一周学会Mootools 1.4中文教程:(7)汇总收尾
  3. linux进程间通信-管道
  4. JavaScript:零星知识
  5. 初步认识注册表(待续)
  6. 巴巴运动网学习笔记(36-40)
  7. JDK自带VM分析工具jps,jstat,jmap,jconsole
  8. 关于大龄程序员的谣言 新手必读
  9. js运算符+运算方式
  10. Marble原理之线程中断