本文讨论一下join技术背后的机制。我们知道常用的表连接有如下几种笛卡尔连接
内连接
左外连接
右外连接
全连接
这些sql的写法,想必大家都很清楚了,那么这些连接的数据访问是如何实现的呢?nested loop
我们看如下查询SQL> alter session set optimizer_mode=rule;
Session altered.
SQL> select ename,dname from emp,dept where emp.deptno=dept.deptno;
14 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3625962092
------------------------------------------------
| Id | Operation | Name |
------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | NESTED LOOPS | |
| 2 | NESTED LOOPS | |
| 3 | TABLE ACCESS FULL | EMP |
|* 4 | INDEX UNIQUE SCAN | PK_DEPT |
| 5 | TABLE ACCESS BY INDEX ROWID| DEPT