--10-1emp.deptno = dept.deptno 是連線條件
--dept.loc = 'dallas' 限制條件
select
emp.ename
from
emp, dept
where emp.deptno =
dept.deptno
and dept.loc =
'dallas
'
一方面, 連線條件可用來過濾資料, 另一方面, 為了最大程度的降低連線使用的資料量, 限制條件可能會在連線條件之前進行評估,
例如, 上例, 雖然書寫的位置是限制條件在連線條件之下, 但是請注意限制條件 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...