笛卡尔积CARTESIAN
ORACLE有三种连接方式:
MERGE JOIN,NESTED LOOP,HASH JOIN.
HASH JOIN 不可能产生CARTESIAN,因为HASH JOIN只用于相等连接。
关键字CARTESIAN只会出现在另外两个连接上。
事实上,NESTED LOOP(嵌套循环),存在一个驱动表和被驱动表,针对驱动表的每条记录去循环读取内循环被驱动表的所有记录。也就是说,如果两个NESTED LOOP的表,都是全表扫描,那就意味着此连接本身就是一个CARTESIAN。所以,在NESTED LOOP中我们是看不到CARTESIAN关键字的。
CARTESIAN关键字只会出现在MERGE JOIN(合并连接)。一般情况下,在处理CARTEDSIAN连接时,这种连接效率比NESTED LOOP要高。
SELECT /*+ USE_MERGE(T1 T2) */ * FROM T1,T2;
SELECT /*+ USE_NL(T1 T2) */ * FROM T1,T2;
NESTED LOOP中对被驱动表连接字段增加索引,可以提高效率。简单想想就明白了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13890753/viewspace-528407/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13890753/viewspace-528407/