背景
我们在开发的过程中使用分页是不可避免的,通常情况下我们的做法是使用limit加偏移量:
select * from table where column=xxx order by xxx limit 1,20。
当数据量比较小时(100万以内),无论你翻到哪一页,性能都是很快的。如果查询慢,只要在
where条件和order by 的列上加上索引就可以解决。但是,当数据量大的时候(小编遇到的情况
是500万数据),如果翻到最后几页,即使加了索引,查询也是非常慢的,这是什么原因导致的呢?我们该如何解决呢?

limit分页原理
当我们翻到最后几页时,查询的sql通常是:select * from table where column=xxx order by xxx limit 1000000,20。
查询非常慢。但是我们查看前几页的时候,速度并不慢。这是因为limit的偏移量太大导致的。
MySql使用limit时的原理是(用上面的例子举例):

MySql将查询出1000020条记录。
然后舍掉前面的1000000条记录。
返回剩下的20条记录。
上述的过程是在《高性能MySql》书中确认的。

解决方案
解决的方法就是尽量使用索引覆盖扫描,就是我们select后面检出的是索引列,而不是
所有的列,而且这个索引的列最好是id。然后再做一次关联查询返回所有的列。
上述的sql可以写成如下方式,最后,没有优化过的sql,执行时间为2s多,优化后的sql执行时间是0.3秒多

复制代码
SELECT
*
FROM
table t
INNER JOIN (
SELECT
id
FROM
table
WHERE
xxx_id = 143381
LIMIT 800000,20
) t1 ON t.id = t1.id
复制代码

sql分页查询越往后越慢相关推荐

  1. SQL 分页查询语句大全即(查找第N到M条记录的方法)

    SQL 分页查询语句大全即(查找第N到M条记录的方法) 第一种方法,我的原创方法 row=2 表示分页行数 page=1 表示页码 getnum=row*page select * from  (se ...

  2. SQL分页查询方案的性能对比

    作者 | 中国农业银行 吴海存 责编 | 晋兆雨 头图 | CSDN下载自视觉中国 导读 本文主要介绍了基于ROWNUM.主键列/非空唯一性列.分析函数.OFFSET-FETCH NEXT机制的几种S ...

  3. SQL分页查询的介绍以及好处~~

    SQL分页查询的介绍以及好处~~ 分页查询 就是将过多的结果在有限的界面上分多页来显示,一般将分页查询分为两类: 逻辑分页.物理分页. 逻辑分页是在用户第一次访问时,将数据库的所有记录全部查询出来,添 ...

  4. Sql分页查询以及top函数简单实例

    Sql分页查询以及top函数简单实例 Sql分页查询以及top函数简单实例 我们做项目时查询表格存在几百上千条数据时经常会需要用到分页,下面就给大家介绍一下在sql中查询分页的简单实例吧.首先我们要知 ...

  5. Spring JPA自定义SQL分页查询

    JPA自定义SQL分页查询 [存在的问题] 在使用Spring JPA原生SQL进行分页查询时存在如下问题: 1.使用List转Page工具类导致查询速度较慢,原因在于先把所有数据查询出来返回成Lis ...

  6. 记一次SpringDateJpa 使用原生sql 分页查询

    jpa 如果使用原生sql如何分页查询呢? @GetMapping("/getInfo")public Result getOpenId() throws Exception{Si ...

  7. Oracle10g SQL分页查询写法与效率比较

    在使用Oracle数据库进行分页查询算法设计时,分页查询的SQL语句基本上可以按照下面给出的模板来进行套用: 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN ...

  8. jpa mysql sql分页查询语句_JPA多条件复杂SQL动态分页查询功能

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

  9. jpa mysql sql分页查询语句_jpa 中 Query 的分页查询和更新

    1,查询分页 注意这个地方nativeQuery=true 代表的是可执行原生sql 先查询出来所有的数据,然后再差个总条数 返回page @Query(nativeQuery = true, val ...

  10. SQL分页查询总结{转}

    开发过程中经常遇到分页的需求,今天在此总结一下吧. 简单说来方法有两种,一种在源上控制,一种在端上控制.源上控制把分页逻辑放在SQL层:端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridVi ...

最新文章

  1. 分布式服务跟踪及Spring Cloud的实现
  2. cctype 头文件定义函数实例
  3. 在webstorm中怎么配置本地服务器
  4. 解决python最新版无法安装TensorFlow,导入TensorFlow
  5. 【Dart学习】-- Dart之匿名方法闭包
  6. 共享文件服务器管理软件,企业共享文件管理软件 局域网文件共享工具的选择...
  7. OpenCV-Python教程:图像金字塔
  8. 关于html引用css无法加载——新手踩的坑
  9. Edge浏览器出现兼容性问题且所有页面崩溃,包括设置均无法打开并访问的解决方法
  10. MVX-Net | 多模型三位像素网络用于3D目标检测
  11. 单片机调试 — Event Recorder 的使用
  12. android 9图工具位子,Android自定义9宫格图片视图
  13. Jsonviewer2 for Notepad++ 64 bit
  14. riscv-gnu-toolchain工具链的安装
  15. 【环境配置】反向SSH——家中电脑连接校园内网服务器
  16. 二次吐血整理的 MAYA教程 快捷键大全,别收藏,直接粘贴拿走!
  17. 网上DIY蛋糕店管理系统2384jsp毕业设计源码+说明文档
  18. QT:在QT中调用摄像头并实现简单的拍照功能
  19. “鬼影”病毒作者改邪归正? 避风头停止开发病毒
  20. 肯德尔系数怎么分析_Kendall Rank(肯德尔等级)相关系数

热门文章

  1. html5视频播放,实现防止下载(一)
  2. 在京东如何查找计算机的销量,京东商品真实销量数据怎么看?教你一键查询
  3. GPS模拟器与Windows Mobile模拟器
  4. 2019淘宝最新类目清单免费提供欢迎点赞
  5. python数学实验与建模司守奎pdf_数学建模算法与程序司守奎.pdf
  6. vue 使用高德地图 获取坐标
  7. 安装使用反编译工具ILSPY
  8. python27缺少dll的解决
  9. 抖音python上的代码_抖音代码舞「图文推荐」,python实例代码
  10. Linux 图片批量压缩工具