2014-05-04 33 views
3

有人可以解釋或指向我的資源,解釋如何關係數據庫(如Postgres或MySQL,我使用Postgres更多)實現joinPostgres JOIN實施

例如,我可以粗略地告訴你,索引可能由B樹構成,其中節點是可能出現在where子句中的條件。只要更改涉及索引(如insert),就會建立此索引。根據這些信息,我可以假設一個未索引的列在insert上會更快,並且索引可能對某些搜索沒有幫助,例如regexlike模式匹配。

我期待有一個類似或更好的理解,當你做一個或多個join s會發生什麼。

+0

Psst:http://stackoverflow.com/a/10657906/905902 – wildplasser

回答

7

在PostgreSQL,規劃器/優化計算(從PostgreSQL的documentation)使用其中3種下列方法之一:

嵌套循環聯接:在左邊的關係找到的每個行權關係進行一次掃描。這個策略很容易實現,但可能非常耗時。 (但是,如果可以使用索引掃描來掃描正確的關係,則這可能是一個好策略。可以使用左邊關係的當前行中的值作爲右側的索引掃描的關鍵點。)

合併連接:每個關係在連接開始前都按連接屬性排序。然後將這兩個關係並行掃描,並將匹配的行組合起來形成連接行。這種連接更具吸引力,因爲每個關係只能被掃描一次。所需的排序可以通過顯式的排序步驟來實現,也可以通過使用連接鍵上的索引以適當的順序掃描關係來實現。

散列連接:首先使用連接屬性作爲散列鍵將正確的關係掃描並加載到散列表中。接下來掃描左邊的關係,並將找到的每一行的適當值用作散列鍵來查找表中的匹配行。

+1

確切的我正在尋找的信息。我也不知道postgres手冊進入了很多細節。謝謝! – tau