概述
延迟关联:为什么叫延迟关联?延迟两个字的关键在于延迟了对列的访问。
延迟关联的原理是借助了覆盖索引。
覆盖索引怎么理解?覆盖两个字的关键在于所需要的值是从索引中获取而非读取表中数据,因此叫覆盖。本人认为覆盖两个字,还有上边的延迟两个字,很精确形象。
延迟关联应用场景:
①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 延迟关联的全部内容,希望文章能够帮你解决mysql 延迟关联所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复