延迟关联:为什么叫延迟关联?延迟两个字的关键在于延迟了对列的访问

延迟关联的原理是借助了覆盖索引。

覆盖索引怎么理解?覆盖两个字的关键在于所需要的值是从索引中获取而非读取表中数据,因此叫覆盖。本人认为覆盖两个字,还有上边的延迟两个字,很精确形象。

延迟关联应用场景:

①select * from 表 A where 条件; (select * 中的*也可以是很多列,如a,b,c,d,e……)

假如表中数据有2000行,而经过where条件过滤后,符合的数据有50行,那么上边的sql写法存在对不需要的行中的数据先取出然后由于不符合where条件,所以最终舍弃。这里的关键点在于:提前取出了不需要数据行中的列。

这个问题如何解决?

改写sql为如下形式:

②select * from 表 A join (select B.id form 表 B where 条件)on 表A.id = 表B.id; (表A和表B为同一张表的不同别名)

这里的关键在于:通过使用覆盖索引先获取需要的键(一般为主键),再根据取到的键关联原表获得需要的行,这可以减少MYSQL扫描那些不符合条件的行。

但不是所有如sql①的写法改写为sql②后会提升性能,应用不对反而会下降,具体问题需要具体分析。

大概可以分三种情况:

总数据为4万行,符合条件的为3万行。改写后提升不是特别明显;

总数据为4万行,符合条件的为300行。改写后性能提升很明显;

总数据为50行,符合条件的为40行,改写后反而性能下降。

此外,一般分页时,如limit n,m,当n特别大时,通常需要用延迟关联来解决性能问题。

mysql 延迟关联相关推荐

  1. mysql延迟关联为什么快_MySQL 覆盖索引与延迟关联详解

    本期来谈谈覆盖索引与延迟关联.在此之前,我们先简单建立一个订单表 Orders 用于举例说明.表中共包含 3 个字段: id int product_id name CREATE TABLE `ord ...

  2. 【MySQL】 性能优化之 延迟关联

    [背景] 某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下.使用工具查看数据库正在执行的sql ,排在前面的大部分是: SELECT id, cu_id, name, inf ...

  3. mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联

    延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据. 为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针? 如果存的是物理地址指针不就不 ...

  4. Mysql分页关联查询优化

    以下内容参考<高性能Mysql> 优化关联查询 这个话题基本上整本书都在讨论,这里需要特别提到的是: 确保ON或者USING子句中的列上有索引.在创建索引的时候就要考虑到关联的顺序. 当表 ...

  5. jmr连接mysql_MYSQL 优化之延迟关联

    SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id 覆盖 索引 必须 要 存 ...

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

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

  7. mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优

    作者:成金之路 www.cnblogs.com/uttu/p/6384541.html 本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万 ...

  8. 揪出MySQL延迟上千秒的元凶

    揪出MySQL延迟上千秒的元凶 背景 Part1:写在最前 MySQL的延迟告警想必大家一定不陌生,MySQL引起从库延迟的原因有很多,从硬件上讲可能是网卡,磁盘,内存达到瓶颈,从数据库层面来讲,可能 ...

  9. php mysql 表关联,mysql的多表关联_MySQL

    bitsCN.com mysql的多表关联 数据库中经常要用到多个表的关联.mysql的关联主要包括inner join,left join,right join三种,下面分别加以介绍,并举例说明. ...

  10. MySQL左关联、右关联、内关联查询

    要说MySQL的关联查询,首先先说一下笛卡尔积, 有两个集合 A = {1, 2},B = {1, 3},这两个集合的笛卡尔积 A * B就有四种情况, A * B = {(1,1), (1,3), ...

最新文章

  1. CSS How to align a div center
  2. python有趣小程序 表白-抖音最火的整蛊表白小程序如何做出来的?教你用python做出...
  3. onInterceptTouchEvent和onTouchEvent调用时序
  4. 京东10亿级调用量背后的高可用网关系统架构实践!
  5. 最牛啤的java,没有之一~
  6. Spring boot 整合dynamic实现多数据源
  7. WARNING: Ignoring invalid distribution -ip
  8. P3327-[SDOI2015]约数个数和【莫比乌斯反演】
  9. 【Python】main函数 if __name__=='__main__' 详解
  10. java版 二叉树 所有递归和非递归遍历算法
  11. 【Android Studio】入门系列 4.1.Coding 定位目标
  12. lua与python结合_从Python到Lua
  13. python+opencv打开摄像头、拍摄指定次数的照片_python+openCV调用摄像头拍摄和处理图片的实现...
  14. 编程语言-Python-GUI
  15. Android Multimedia框架总结(二十七)MediaCodec回顾
  16. 信号与系统公式笔记(8)——拉普拉斯变换
  17. 四年磨一剑未能成就神话 海思K3的悲剧2009(转自www.study-bbs.com)
  18. 全球院士共话智能工业创新
  19. 两色注塑机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 用matlab求得矩阵的最大特征值

热门文章

  1. 网页制作:制作一个官网
  2. 解决SSLHandshakeException :sun.security.validator.ValidatorException: PKIX path building failed:
  3. 赫兹的单位换算_赫兹的换算(赫兹单位的换算怎么换)
  4. 【修真院PM小课堂】轮播图有几种表现形式,适合什么场景, 有哪些切换方式?
  5. Linux——MySQL分表分区
  6. threejs学习笔记:贴图实现木地板效果
  7. 缓存穿透、击穿、雪崩什么的分不清楚?看了这篇文章后,我明白了
  8. jenkins集成自动化配置(二) 创建项目和项目配置
  9. redis中以目录形式存储和读取数据
  10. 唐山师范学院计算机论文,唐山师范学院