通過雜湊聯接進行高階優化
雜湊聯接有兩種輸入:生成輸入和探測輸入。查詢優化器指派這些角色,使兩個輸入中較小的那個作為生成輸入。
雜湊聯接用於多種設定匹配操作:內部聯接;左外部聯接、右外部聯接和完全外部聯接;左半聯接和右半聯接;交集;並集和差異。此外,雜湊聯接的某種變形可以進行重複刪除和分組,例如 SUM(salary) GROUP BY department。這些修改對生成和探測角色只使用一個輸入。
以下幾節介紹了不同型別的雜湊聯接:記憶體中的雜湊聯接、Grace 雜湊聯接和遞迴雜湊聯接。
記憶體中的雜湊聯接
雜湊聯接先掃描或計算整個生成輸入,然後在記憶體中生成雜湊表。根據計算得出的雜湊鍵的雜湊值,將每行插入雜湊儲存桶。如果整個生成輸入小於可用記憶體,則可以將所有行都插入雜湊表中。生成階段之後是探測階段。一次一行地對整個探測輸入進行掃描或計算,併為每個探測行計算雜湊鍵的值,掃描相應的雜湊儲存桶並生成匹配項。
Grace 雜湊聯接
如果生成輸入大於記憶體,雜湊聯接將分為幾步進行。這稱為“Grace 雜湊聯接”。每一步都分為生成階段和探測階段。首先,消耗整個生成和探測輸入並將其分割槽(使用雜湊鍵上的雜湊函式)為多個檔案。對雜湊鍵使用雜湊函式可以保證任意兩個聯接記錄一定位於相同的檔案對中。因此,聯接兩個大輸入的任務簡化為相同任務的多個較小的例項。然後將雜湊聯接應用於每對分割槽檔案。
遞迴雜湊聯接
如果生成輸入非常大,以至於標準外部合併的輸入需要多個合併級別,則需要多個分割槽步驟和多個分割槽級別。如果只有某些分割槽較大,則只需對那些分割槽使用附加的分割槽步驟。為了使所有分割槽步驟儘可能快,將使用大的非同步 I/O 操作以便單個執行緒就能使多個磁碟驅動器繁忙工作。
注意:
如果生成輸入僅稍大於可用記憶體,則記憶體中的雜湊聯接和 Grace 雜湊聯接的元素將結合在一個步驟中,生成混合雜湊聯接。
在優化過程中不能始終確定使用哪種雜湊聯接。因此,SQL Server 開始時使用記憶體中的雜湊聯接,然後根據生成輸入的大小逐漸轉換到 Grace 雜湊聯接和遞迴雜湊聯接。
如果優化器錯誤地預計兩個輸入中哪個較小並由此確定哪個作為生成輸入,生成角色和探測角色將動態反轉。雜湊聯接確保使用較小的溢位檔案作為生成輸入。這一技術稱為“角色反轉”。至少一個檔案溢位到磁碟後,雜湊聯接中才會發生角色反轉。
注意:
角色反轉的發生獨立於任何查詢提示或結構。角色反轉不會顯示在查詢計劃中;角色反轉對於使用者是透明的。
雜湊援助
術語“雜湊援助”有時用於描述 Grace 雜湊聯接或遞迴雜湊聯接。
注意:
遞迴雜湊聯接或雜湊援助會導致伺服器效能降低。如果跟蹤中顯示許多雜湊警告事件,請更新正在聯接的列上的統計資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520805/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++進階(雜湊)C++
- 使用FORCESEEK表進行高階優化優化
- 通過分割槽進行優化(轉)優化
- golang 效能優化之累加雜湊Golang優化
- 如何優化一個雜湊策略優化
- 【物聯網雲端對接-2】通過MQTT協議與阿里雲物聯網套件進行雲端通訊MQQT協議阿里套件
- 進位制雜湊
- 【物聯網雲端對接-1】 通過HTTP協議與微軟Azure IoT hub進行雲端通訊HTTP協議微軟
- MySQL 高階優化MySql優化
- Hive高階優化Hive優化
- 通過ADDM進行SQL調優SQL
- oracle 通過statspace 進行效能調優Oracle
- 高階自定義View — 粒子變幻、隧道雜湊、組合文字View
- 高階自定義View --- 粒子變幻、隧道雜湊、組合文字View
- Mysql高階優化(一)MySql優化
- Mysql高階優化(二)MySql優化
- React高階效能優化React優化
- 效能優化部分——高階SQL優化2優化SQL
- 進階的Redis之雜湊分片原理與叢集實戰Redis
- MySQL 優化一(高階篇)MySql優化
- MySQL 優化(二)(高階篇)MySql優化
- MySQL 優化三(優化規則)(高階篇)MySql優化
- 坑系列 —— 快取 + 雜湊 = 高併發?快取
- 通過使用Showplan SET選項執行優化優化
- js 雜湊雜湊值的模組JS
- 雜湊表(雜湊表)詳解
- Spark效能優化指南:高階篇Spark優化
- jQuery高階技巧——效能優化篇jQuery優化
- 高階iOS應用效能優化iOS優化
- 雜湊
- 通過串列埠進行通訊 :串列埠
- Kotlin進階(二)中綴、內聯、高階函式Kotlin函式
- 雜湊表(雜湊表)原理詳解
- 【尋跡#3】 雜湊與雜湊表
- CSS高階進階CSS
- 查詢(3)--雜湊表(雜湊查詢)
- 樹雜湊
- 雜湊碰撞