首页 > 其他 > 详细

关于表联结方法(一)

时间:2014-11-20 02:21:45      阅读:253      评论:0      收藏:0      [点我收藏+]
在sql语句中,如果from后面有多个表时,关于表的联结方法是很重要的一个环节。
大体有nested loop join,hash join,merge join

-->nested loop join

这种场景一般适用于大表和小表的关联,一般来说小表适用做为驱动表,对于小表中的匹配记录和大表做关联,这个时候小表是在外部循环,大表在内部循环,小表中的匹配记录都和大表做一个关联。
SQL> create table t as select *from dba_objects where object_id is not null;
SQL> create table t1 as select *from user_objects where object_id is not null;
SQL> exec dbms_stats.gather_table_stats(user,‘T‘,cascade=>TRUE);
SQL> exec dbms_stats.gather_table_stats(user,‘T1‘,cascade=>TRUE);
SQL> create unique index ind_t on t(object_id);
SQL> create unique index int_t1 on t1(object_id) ;
SQL> select  count(*)from t;
  COUNT(*)
----------
     10783
下面的例子,t1表中的数据较少,表t中的数据多,就以表t1位驱动表,走了全索引扫描查取到t1的数据,然后对于t1中的数据和t做匹配,匹配的时候走了唯一性扫描
bubuko.com,布布扣

-->hash join
这种场景适合于大表和大表之间的关联。通过hash算法来做两个表之间的匹配映射。

SQL> create table t as select *from dba_objects where object_id is not null;
SQL> create table t1 as select *from dba_objects where object_id is not null;
SQL> exec dbms_stats.gather_table_stats(user,‘T‘,cascade=>TRUE);
SQL> exec dbms_stats.gather_table_stats(user,‘T1‘,cascade=>TRUE);
SQL> create unique index ind_t on t(object_id);
SQL> create unique index int_t1 on t1(object_id) ;
SQL> select  count(*)from t;
  COUNT(*)
----------
     10783
对于表t1中的记录,都是通过hash映射来匹配t中的记录。可能对于cpu的资源消耗还是相对较多的,因为内部做了大量的计算。在生产环境中的实践来说,hash join还是不错的。特别是在和并行结合之后。
bubuko.com,布布扣

关于表联结方法(一)

原文:http://blog.itpub.net/23718752/viewspace-1336829/

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!