【PL/SQL数据库】 三种关联机制 - 执行计划

【PL/SQL数据库】 三种关联机制 - 执行计划_第1张图片

看完这章你会学习到以下内容:
1. 三种关联分别是什么?
2. 什么时候那个适合用哪个?(总结)


一共有三种关联机制:
Nest Loop 嵌套循环 (大小表)
Sort Merge 排序合并 (添加索引+两张大表)
Hash Join 哈希 (内联)


嵌套循环

【PL/SQL数据库】 三种关联机制 - 执行计划_第2张图片

对上图进行简单的解释,在进行嵌套循环的时候,通常情况是(大表+小表)的形式,并且会以小表作为内表,因为小表可以常驻内存,这样当进行磁盘IO的时候,只有大表会产生开销;反之,如果因为大表过大,则大表不能常驻内存,内外表的数据均存在与磁盘中,这样,进行磁盘IO开销是非常“可观”的

解释了,谁做内外表的问题后,看下嵌套关联的操作过程:

1.取得要操作的表空间
2.对表空间的记录进行排序
3.通过嵌套循环进行赛选(如果是双表,可能是两个for嵌套)
4.获得需求的记录

归并关联

【PL/SQL数据库】 三种关联机制 - 执行计划_第3张图片

对与归并关联,有着很好的时间复杂度(如果两个表中的元素已经排序,如果未排序,时间开销可能为XlogX + YlogY + X + Y)。

那么,如何对排序好的元素进行关联呢:

1.首先每张表,会有一个指向头元素的指针
2.两个指针,进行比较,如果相同,则提出该元素
3.比较后续元素,谁小谁先向下移动
4.如此,一直到各自表的结尾

Hash关联(散列关联)

【PL/SQL数据库】 三种关联机制 - 执行计划_第4张图片

散列关联,则是对表进行散列后(不可超过内存的大小),另外一张表进行匹配;通常来说被散列的依旧是小表,匹配的过程需要匹配全部元素。

以上三种,根据以上三种关联方式,可以大致了解到一定的sql语句的原理以及调优机制,即为什么有的时候会加索引、或者不加、或者改变内外表的关联。

总结:

【PL/SQL数据库】 三种关联机制 - 执行计划_第5张图片


版权声明:本文为CSDN博主「Anger_Coder」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:Study-Hard-数据库连接及实现内部原理(下)_Anger_Coder的专栏-CSDN博客

你可能感兴趣的:(plsql,oracle)