其实在我们的工作中类似,select * from your_table order by id desc limit 2000000,20会经常遇见,比如在分页中就很常见。

如果我们的sql中出现这样的查询(比如:点击查看“末页”),那是相当恐怖的(等待时间会很长)。该sql是一个非常典型的排序+分页查询:order by col limit N,OFFSET M, MySQL 执行此类sql时需要先扫描到N行,然后再去取 M行。对于此类大数据量的排序操作,取前面少数几行数据会很快,但是越靠后,sql的性能就会越差,因为N越大,MySQL 需要扫描不需要的数据然后在丢掉,这样耗费大量的时间。

【分析】
针对limit 优化有很多种方式,
1 前端加缓存,减少落到库的查询操作
2 优化SQL
3 使用书签方式 ,记录上次查询最新/大的id值,向后追溯 M行记录。
4 使用Sphinx 搜索优化。
对于第二种方式 我们推荐使用"延迟关联" (deferred join) 的方法来优化排序操作,何谓"延迟关联" :通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。

【解决】
根据延迟关联的思路,修改SQL 如下:

  select a.* from your_table a,(

                select id from your_table where (这里的where条件根据具体情况具体编写) order by id desc limit 2000000,20

                ) b where a.id = b.id

转载于:https://www.cnblogs.com/573734817pc/p/11230265.html

mysql 利用延迟关联优化查询(select * from your_table order by id desc limit 2000000,20)相关推荐

  1. 百万数据量下,使用延迟关联优化超大分页

    百万数据量下,使用延迟关联优化超大分页 MySQL 并不是跳过 offset 行,而是取 offset + N 行,然后返回放弃前 offset 行,返回 N 行,那当offset 特别大的时候,效率 ...

  2. 利用延迟关联或者子查询优化超多分页场景

    2019独角兽企业重金招聘Python工程师标准>>> MySQL并不是跳过offset行,而是取offset+N行,然后返回放弃前offset行,返回N行,那当offset 特别大 ...

  3. MySQL学习笔记5||数据查询select

    备注:该博客内容根据技术教学视频整理与总结而成,原视频来自于尚硅谷MySQL教程. 一.基础查询 select from 语法:        SELECT 要查询的东西[FROM 表名]; 特点:  ...

  4. mysql索引 asc_谈谈MySQL中的降序索引 order by id DESC / ASC

    今天这篇主要讲order by 语句中的多个字段asc desc的问题.mysql5中,索引存储的排序方式是ASC的,没有DESC的索引.现在能够理解为啥order by 默认是按照ASC来排序的了吧 ...

  5. mysql 两表关联 分组查询

    最近有个预约需求 记录一下 sql 思路 两张表 A Ba 表记录每个预约时间点和这个时间点可预约人数b 表 记录每条预约记录最后结果得出 本时间段可预约的数量 <?phpuse Illumin ...

  6. 合理利用延迟初始化优化 Spring Boot

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1. 前言 随着我们项目 ...

  7. MySQL大数据量分页查询方法及其优化

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...

  8. 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...

  9. MySQL两千万数据优化迁移

    最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...

  10. MySQL基础(1)查询模块

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

最新文章

  1. 算法---------至少有K个重复字符的最长子串(Java版本)
  2. Flutter开发之官网的第一个例子实现(46)
  3. python 无头模式 绕过检测_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测...
  4. nginx基础概念(100%)之pipe
  5. leetcode 354. 俄罗斯套娃信封问题(二维排序有关)
  6. 9,求整数的二进制中1的个数《剑指offer》
  7. Ubuntu快速设置指南
  8. Checkra1n 越狱常见问题大全
  9. matlab中断路器怎么表示什么,断路器的符号各代表什么意思
  10. 安装CentOS7.6
  11. [RK3288][Android6.0] 调试笔记 --- 系统第一次开机进入Recovery模式原因
  12. android 阅读器自动滚动,在Android手机上实现阅读器翻页效果.doc
  13. IT十年人生过客-十一-新挑战
  14. SQLi lab: Equivalent to information schema on Oracle
  15. 2020-01-25
  16. 智慧医院导诊导航系统
  17. 电脑galgame全cg存档怎么用_Galgame十二神器:君与彼女与彼女之恋
  18. 云平台和买服务器对比
  19. 图像识别DM8127开发攻略 ——RDK软件架构浅析及编译
  20. react-draft-wysiwyg的使用

热门文章

  1. python批量运行py文件
  2. 苍蓝契约服务器维护,苍蓝誓约萌新玩家新手任务及刷初始方法
  3. 琴岛学院计算机工程系怎么样,青岛理工大学琴岛学院计算机工程系学子荣获全国网络技术挑战赛二等奖...
  4. kubernetes视频教程笔记 (12)-容器探针
  5. html与css游戏开发工具,分享15个最佳的HTML/CSS设计和开发框架
  6. 前端----JQuery
  7. S19王者荣耀服务器维护,王者荣耀:S19新赛季更新,她没上线惨遭重做,英雄调整,界面优化...
  8. Unity3D(一) 操作界面及游戏常识
  9. 47结构图纸_2019年1月压力容器设计审批人员培训考核班图纸答辩试题
  10. php之获取ip(网站地址)