SQL Server 2008 高階查詢優化概念

iSQlServer發表於2008-12-22

Microsoft SQL Server 使用記憶體中的排序和雜湊聯接技術執行排序、交集、並集、差分等操作。SQL Server 利用這種型別的查詢計劃支援垂直表分割槽(有時稱為分列儲存)。

SQL Server 使用三種型別的聯接操作:

Nested Loops 聯接

合併聯接

雜湊聯接

如果一個聯接輸入很小(不到 10 行),而另一個聯接輸入很大而且已在其聯接列上建立了索引,則索引 Nested Loops 連線是最快的聯接操作,因為它們需要的 I/O 和比較都最少。有關 Nested Loops 的詳細資訊,請參閱瞭解巢狀迴圈聯接。

如果兩個聯接輸入並不小但已在二者聯接列上排序(例如,如果它們是通過掃描已排序的索引獲得的),則合併聯接是最快的聯接操作。如果兩個聯接輸入都很大,而且這兩個輸入的大小差不多,則預先排序的合併聯接提供的效能與雜湊聯接相近。但是,如果這兩個輸入的大小相差很大,則雜湊聯接操作通常快得多。有關詳細資訊,請參閱瞭解合併聯接。

雜湊聯接可以有效處理未排序的大型非索引輸入。它們對複雜查詢的中間結果很有用,因為:

中間結果未經索引(除非已經顯式儲存到磁碟上然後建立索引),而且通常不為查詢計劃中的下一個操作進行適當的排序。

查詢優化器只估計中間結果的大小。由於對於複雜查詢,估計可能有很大的誤差,因此如果中間結果比預期的大得多,則處理中間結果的演算法不僅必須有效而且必須適度弱化。

雜湊聯接可以減少使用非規範化。非規範化一般通過減少聯接操作獲得更好的效能,儘管這樣做有冗餘之險(如不一致的更新)。雜湊聯接則減少使用非規範化的需要。雜湊聯接使垂直分割槽(用單獨的檔案或索引代表單個表中的幾組列)得以成為物理資料庫設計的可行選項。有關詳細資訊,請參閱瞭解雜湊聯接。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520802/,如需轉載,請註明出處,否則將追究法律責任。

相關文章