Oracle的表連線方法(一)排序合併連線
Oracle表連線方法有四種:
● 排序合併連線(Sort Merge Join)
● 巢狀迴圈連線(Nested Loops Join)
● 雜湊連線(Hash Join)
● 笛卡爾積(Cartesian Product)
排序合併連線是將連線的兩個表使用連線列排序後,對排序後的結果集進行合併後再得到匹配記錄。如果連線列上面有索引,可以避免排序,那麼最佳化器就有可能會選擇排序合併連線。可以用於=,>,>=,<,<=連線條件,不適用於<>,like連線條件。對應執行計劃為SORT JOIN和MERGE JOIN 。
SQL> select e.employee_id,e.last_name,d.department_name from employees e,departments d where e.department_id=d.department_id;
106 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1343509718
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 106 | 3286 | 6 (17)| 00:00:01 |
| 1 | MERGE JOIN | | 106 | 3286 | 6 (17)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPARTMENTS | 27 | 432 | 2 (0)| 00:00:01 |
| 3 | INDEX FULL SCAN | DEPT_ID_PK | 27 | | 1 (0)| 00:00:01 |
|* 4 | SORT JOIN | | 107 | 1605 | 4 (25)| 00:00:01 |
| 5 | TABLE ACCESS FULL | EMPLOYEES | 107 | 1605 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
如果沒有索引,則會選擇雜湊連線:
SQL> create table emp as select * from employees;
Table created.
SQL> create table dept as select * from departments;
Table created.
SQL> select e.employee_id,d.department_name from emp e,dept d where e.department_id=d.department_id;
106 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 615168685
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 106 | 5936 | 6 (0)| 00:00:01 |
|* 1 | HASH JOIN | | 106 | 5936 | 6 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| DEPT | 27 | 810 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| EMP | 107 | 2782 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
如果使用不等連線條件,則會選擇巢狀迴圈連線:
SQL> select e.employee_id,d.department_name from employees e,departments d where e.department_id!=d.department_id;
2756 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2968905875
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2757 | 63411 | 41 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 2757 | 63411 | 41 (0)| 00:00:01 |
| 2 | TABLE ACCESS FULL| DEPARTMENTS | 27 | 432 | 3 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| EMPLOYEES | 102 | 714 | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2140179/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle表連線操作——Merge Sort Join(合併排序連線)Oracle排序
- 兩表連線三:合併連線
- Oracle的表連線方法(三)雜湊連線Oracle
- 排序合併連線(sort merge join)的原理排序
- Oracle的表連線方法(七)Oracle
- Oracle的表連線方法(五)Oracle
- Oracle的表連線方法(六)Oracle
- Oracle的表連線方法(二)巢狀迴圈連線Oracle巢狀
- 排序和表連線排序
- 微課sql最佳化(16)、表的連線方法(5)-關於Merge Join(排序合連線)SQL排序
- 表連線方法
- Oracle 表連線Oracle
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- 【TUNE_ORACLE】列出走了錯誤的排序合併連線的SQL參考Oracle排序SQL
- ORACLE 表連線方式Oracle
- oracle表連線方式Oracle
- Oracle的表連線方法(四)笛卡爾積Oracle
- Oracle字串連線的方法Oracle字串
- 【SQL】表連線 --半連線SQL
- 水煮oracle31----連線查詢&合併查詢Oracle
- Oracle表連線操作——Hash Join(雜湊連線)下Oracle
- Oracle表連線操作——Hash Join(雜湊連線)上Oracle
- 兩表連線一:巢狀迴圈連線巢狀
- DB2 SQL之行合併(連線)DB2SQL
- Oracle(+)連線與Join連線Oracle
- Oracle左連線,右連線Oracle
- Oracle的左連線和右連線Oracle
- Oracle查詢轉換(三)外連線檢視合併Oracle
- 表連線方式及使用場合
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- Oracle的三種表連線方式Oracle
- ORACLE 半連線與反連線Oracle
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- oracle 各種表間連線Oracle
- java操作Oracle 方式一 ( 連線-》操作-》斷開連線 )JavaOracle
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- Oracle資料庫中的表連線方式及使用場合Oracle資料庫
- JDBC 連線oracle三種方法JDBCOracle