10 表連線優化

2022-09-05 01:51:12 字數 1049 閱讀 6414

--

emp.deptno = dept.deptno 是連線條件

--dept.loc = 'dallas' 限制條件

select

emp.ename

from

emp, dept

where emp.deptno =

dept.deptno

and dept.loc =

'dallas

'

10-1

一方面, 連線條件可用來過濾資料, 另一方面, 為了最大程度的降低連線使用的資料量, 限制條件可能會在連線條件之前進行評估,

例如, 上例, 雖然書寫的位置是限制條件在連線條件之下, 但是請注意限制條件 dept.loc = 'dalls'是在連線條件之前應用的.

10.2 巢狀迴圈連線(nested loops)

分為外部迴圈和內部虛幻, 外部迴圈為左子節點, 內部迴圈為右子節點, 當外部迴圈執行一次的時候, 內部迴圈需要針對外部迴圈

返回的每條記錄執行一次.    巢狀迴圈有以下幾點特徵:

~ 左子節點(外部迴圈)只會執行一次, 而右子節點(內部迴圈)一般會執行很多次.

~ 在所有資料處理完之前, 就可以返回結果集的第一條記錄.

~ 可以有效的利用索引來處理限制條件與連線條件

~ 支援所有型別的連線.    

10.3 合併連線

處理合併連線的時候, 兩個資料集都會被讀出來, 並按照連線條件的字段進行排序, 當這些操作一完成, 兩個工作區的內容就會被

合併, 特徵:

~ 每個子節點只會執行一次

~ 每個輸入資料集都必須按照連線條件的字段進行排序

~ 由於這些排序操作, 在返回結果集的第一條記錄之前, 兩個輸入資料集都必須被完全讀出並排序.

~ 所有的連線型別都支援合併連線.

還有雜湊連線, 外連線等

10.6 選擇連線的方法

需要考慮以下幾個方面:

~ 優化器目標, first_rows 還是 all_rows

~ 連線型別及謂詞條件的可選性

~ 是否可以執行並行連線

oracle優化之表連線方式

1 表連線型別 nested loops join hash join merge sort join 2 表連線的知識點 表訪問次數 表驅動順序,是否排序,使用限制。nested loops join 驅動表被訪問0次或1次,被驅動表訪問0次或n次,n由驅動表返回的結果集的條數來定。與驅動順序有關...

SQL學習筆記10 表連線查詢

內聯 表連線 內聯 查詢這個學生的時候把這個學生所在的班級的名字也顯示出來 select from student inner join tblclass on student.tclassid tblclass.tclassid 查詢這個學生的時候把這個學生所在的班級的名字也顯示出來 同時也查詢出...

mysql表聯合union優化為表連線join

話說之前用php寫的乙個統計跑得好好的,突然一天不出資料了,追其原因出在sql語句上,由於資料量增大加上伺服器老舊,執行sql語句的時候出現記憶體不足的提示,遂決定優化sql語句使其不產生臨時表。需求清晰,下面舉例說明 原sql語句 select count distinct md5 from ac...