在OLTP系統裡,嵌套連接占了70%左右,哈希連接占了20%,合並排序連接占了10%。
算法:嵌套連接從兩個表分選出小表為驅動表,大表為被驅動表,先訪問驅動表(只訪問1次),然後根據驅動表返回的行數多次訪問被驅動表(被驅動表訪問的次數等於驅動表返回的行數)。
根據上面的算法,我們可以知道,想要讓嵌套連接性能好,必須同時滿足以下3個條件:
1)驅動表返回的行數要足夠少(減少被驅動表訪問的次數);
2)驅動表的限制條件要有索引(提高訪問驅動表的性能);
3)被驅動表的連接條件要有索引(提高訪問被驅動表的性能)。
前面說過,在OLTP系統中,嵌套連接占了70%,因為OLTP系統返回的數據比較少,很適合嵌套連接的情形;還有一個原因就是,嵌套連接幾乎沒有限制,所有的操作都可以用嵌套連接,不像哈希連接和合並排序連接有很多的限制。
算法:哈希連接是從兩個表中選出一個小表作為驅動表,大表為被驅動表,根據驅動表構建哈希表,然後被驅動表的每一行在哈希表中進行哈希匹配。驅動表和被驅動表各訪問一次。
根據上面的算法我們可以知道,哈希連接只支持等值連接,它的限制最多。
想讓哈希連接性能好,必須保證驅動表足夠小,使得內存PGA可以放下哈希表。