轉載自:https://www.cnblogs.com/kerrycode/p/5935704.htmlhtml
此外須要理解:優化
1 什麼是半鏈接?spa
semi join,半鏈接操做,是關係代數規定的擴展操做符之一。對於「R semi-join S」其語義爲:鏈接後的結果中,只包括R與S在公共屬性上的交集所限定的R中的部分元組。code
anti join,反半鏈接,語義與半鏈接相反。即「R semi-join S」至關於「S anti-join R」。htm
2 爲何要用半鏈接優化子查詢?blog
對於子查詢,其子查詢部分相對於父表的每一個符合條件的元組,都要把子查詢執行一輪。效率低下。用半鏈接操做優化子查詢,是把子查詢上拉到父查詢中,這樣子查詢的表和父查詢中的表是並列關係,父表的每一個符合條件的元組,只須要在子表中找符合條件的元組便可,不須要「父表的每一個符合條件的元組,都要把子查詢執行一輪」,因此效率提升。索引
這種優化方式,稱爲「上拉/扁平化」。效率
3. 半鏈接操做對於表達「半」含義的表,具備「存在便可」的含義,若是有多個元組符合鏈接條件,則不能讓每一個符合條件的元組都與外表進行鏈接,因此,對於半鏈接的表即一個內表來講,就須要把知足條件的重複元組去掉或使用索引等方式進行「只選擇一個」式的操做。擴展