新闻中心> 文章详情

南京Oracle认证培训 Oracle表三种连接方式

2015年11月05日

  在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理。南京Oracle认证培训

 

  一、连接方式:

 

  嵌套循环(Nested Loops (NL))

 

  (散列)哈希连接(Hash Join (HJ))

 

  (归并)排序合并连接(Sort Merge Join (SMJ) )

 

  二、连接说明:

 

  1.Oracle一次只能连接两个表。不管查询中有多少个表,Oracle在连接中一次仅能操作两张表。南京Oracle认证培训

 

  2.当执行多个表的连接时,优化器从一个表开始,将它与另一个表连接;然后将中间结果与下一个表连接,以此类推,直到处理完所有表为止。南京Oracle培训

 

  三、表连接详解:

 

  1. NESTED LOOP

 

  对于被连接的数据子集较小的情况,nested loop连接是个较好的选择。nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查找,没有索引一般就不会是 nested loops.一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引,这样就走nstedloop.如果驱动表返回记录太多,就不适合nested loops了。如果连接字段没有索引,则适合走hash join,因为不需要索引。南京Oracle认证培训

 

  可用ordered提示来改变CBO默认的驱动表,可用USE_NL(table_name1 table_name2)提示来强制使用nested loop.

 

  要点如下:

 

  1)对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择

 

  2)使用USE_NL(table_name1 table_name2)可是强制CBO 执行嵌套循环连接

 

  3)Nested loop一般用在连接的表中有索引,并且索引选择性较好的时候

 

  4)OIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。

 

  5)Nested loops 工作方式是从一张表中读取数据,访问另一张表(通常是索引)来做匹配,nested loops适用的场合是当一个关联表比较小的时候,效率会更高。南京Oracle认证培训


上一篇下一篇
按时发顺丰

技术交流群

Java大数据交流群560819979    加入
Python技术交流群595083299    加入
Oracle技术交流群595119011    加入
Web前端技术交流群604697610    加入
Huawei技术交流群482919361    加入
Redhat技术交流群587875348    加入
UI设计技术交流群511649801    加入
Cisco技术交流群596886705    加入
IT运维技术交流群605888381    加入