SQL连接查询优化技巧探讨:第五篇姊妹篇,有何新见解?
- 内容介绍
- 相关推荐
本文共计3288个文字,预计阅读时间需要14分钟。
上篇SQL优化篇,更多偏向于优化的思维概念,先抛出4个优化问题中,篇幅过长,仅对前两个问题进行了解析。接下来,我们来聊聊SQL的连接查询优化,更偏向于实际应用。
上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析。
接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨。篇幅过长,请耐心看完。
1.嵌套查询、HASH连接、排序合并连接、笛卡尔连接等怎样玩能达到最优?
2.IN与EXISTS谁快谁慢?
嵌套循环(NESTED LOOPS)
嵌套循环的算法:驱动表返回一行数据,通过连接列传值给被驱动表,驱动表返回多少行,被驱动表就要被扫描多少次。
这里我补充一下驱动表和被驱动表:理解驱动表和被驱动表的本质,需要理解顺序读取和随机读取的差异,内存适合随机读取,硬盘则顺序读取的效率比较好。
驱动表,作为外层循环,若进行一次IO将所有数据读取,则适合顺序读取,一次性批量的把数据读取出来,不考虑缓存情况下。
被驱动表,即里层循环,由于需要不断的拿外层循环传进来的每条记录去匹配,所以如果是适合随机读取的,那么效率就会比较高。如果表上有索引,实际上就意味着这个表是适合随机读取的。
本文共计3288个文字,预计阅读时间需要14分钟。
上篇SQL优化篇,更多偏向于优化的思维概念,先抛出4个优化问题中,篇幅过长,仅对前两个问题进行了解析。接下来,我们来聊聊SQL的连接查询优化,更偏向于实际应用。
上篇的sql优化篇章,更多偏向于优化的思想概念,先前抛出的4个优化问题中,篇幅过长,只对前两个问题进行了解析。
接下来我们一起来谈谈sql的连接查询优化,更偏向于实际运用,并对如下两个问题进行探讨。篇幅过长,请耐心看完。
1.嵌套查询、HASH连接、排序合并连接、笛卡尔连接等怎样玩能达到最优?
2.IN与EXISTS谁快谁慢?
嵌套循环(NESTED LOOPS)
嵌套循环的算法:驱动表返回一行数据,通过连接列传值给被驱动表,驱动表返回多少行,被驱动表就要被扫描多少次。
这里我补充一下驱动表和被驱动表:理解驱动表和被驱动表的本质,需要理解顺序读取和随机读取的差异,内存适合随机读取,硬盘则顺序读取的效率比较好。
驱动表,作为外层循环,若进行一次IO将所有数据读取,则适合顺序读取,一次性批量的把数据读取出来,不考虑缓存情况下。
被驱动表,即里层循环,由于需要不断的拿外层循环传进来的每条记录去匹配,所以如果是适合随机读取的,那么效率就会比较高。如果表上有索引,实际上就意味着这个表是适合随机读取的。

