SQL 層功能改進 - lookupJoin 的最佳化
一、傳統 jon 演算法
lo okupJoin 是 join 查詢的一種, 傳統 join 演算法為:
1. 遍歷 A 表,讀取一條資料 r
2. 遍歷 B 表,對於每條資料,與 r 進行 join 操作3. 重複 1、2 操作,直到 A 表遍歷完所有資料
二、lookupJoin
現有的 lookupJoin 流程為:
1. 遍歷 A 表,讀取一條資料 r
2. 透過 join key 以及資料 r 構造 B 表資料取值範圍
3. 透過構造的取值範圍對 B 表進行讀取操作,將讀取出的資料與 r 進行 join 操作,返回結果
透過這樣的做法,join 可減少對 B 表全表掃描的操作,提升執行效率。但是執行 lookupJoin 操作的前提是在 B 表中存在 join key 的索引,否則無法對 B 表構造取值範圍。
三、分散式 lookupJoin
1. 分散式 lookupJoin 介紹:
以往 KaiwuDB 叢集在執行 lookupJoin 操作時,會提取 A 資料,根據 A 表資料傳送 scan 請求去別的節點讀取資料。這樣會導致大量結果資料集中在 A 表分佈的節點,沒有充分利用多節點並行執行的優勢。
現在,我們將 A 表資料提前透過 hash 重分佈路由到多個節點再並行執行 lookupJoin 操作;這樣不僅可以提高執行效率,還可以使結果集在多個節點按照 hash key 預分佈。
圖 1
2. 分散式 lookupJoin 對分散式執行產生的效果:
分散式 lookupJoin 可以使 join 結果集按照 join 列在節點間呈現 hash 分佈,大大提高了叢集節點算力利用率,減少 hash 重分佈的次數,縮短整體 query 執行時間。
圖 2
如圖 2 所示,在圖 1 的基礎上把 join 結果與 C 表再進行 join 查詢:select * from a,b,c where a.a=b.a and a.a = c.a ,模擬複雜查詢場景。由於在分散式 lookupJoin 查詢後,資料按照 join key 已經在三節點上 hash 分佈了,所以在執行與 C 表的 join 操作時,只需要 hash 重分佈 C 表的資料,減少了 hash 重分佈的次數,提高了執行效率。
3. 分佈表的 lookupJoin:
分佈表是一種特殊表,表中資料按某列的 hash 值分佈在各個節點上,如果分佈表的分佈列與 hash join 列正好一致,在執行分散式 lookupJoin 時可以直接在各個節點並行執行 lookupJoin,省去了 hash 分佈的操作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027415/viewspace-2939595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 改進的sql計算n王后SQL
- 一條sql語句的改進探索SQL
- 使用SQL Profile進行SQL最佳化案例SQL
- 深入解析LLaMA如何改進Transformer的底層結構ORM
- 深入理解ES6之《改進的陣列功能》陣列
- Android Studio3.4新功能和改進Android
- 改進資料庫效能-SQL查詢優化資料庫SQL優化
- 深度剖析阿里巴巴對 Apache Flink 的最佳化與改進阿里Apache
- kingbase SQL最佳化案例 ( union遞迴 改 cte遞迴 )SQL遞迴
- 【SQL最佳化】SQL最佳化的10點注意事項SQL
- 瞭解Postgres 14新功能:效能和監控改進
- sql最佳化:使用sql profile最佳化sql語句SQL
- 從系統功能入手,談知識付費仍需改進的地方
- QT中改變元件的層級QT元件
- JAVA中Action層, Service層 ,model層 和 Dao層的功能區分Java
- SQL的最佳化[轉]SQL
- 騰訊AI Lab提出翻譯改進模型Transformer的3個最佳化方法AI模型ORM
- sql改寫SQL
- 在SQL Server中對檢視進行增刪改SQLServer
- SQL Server 2008對日期時間型別的改進SQLServer型別
- SQL Server效能的改進得益於邏輯資料庫設計SQLServer資料庫
- SQL最佳化案例-改變那些CBO無能為力的執行計劃(一)SQL
- 一條SQL的改寫SQL
- 微軟Windows 10 build 21354 新增"我的興趣"和其他功能的改進!微軟WindowsUI
- MySQL8 的分割槽功能相比 mysql5.7 有什麼改進?MySql
- 使用vplex的mirror功能對儲存層LUN進行資料的遷移
- 如何最佳化並改進美顏sdk人臉識別技術?
- SQL最佳化SQL
- SQL Server最佳化標量函式改寫內聯表值函式SQLServer函式
- [20210428]改進pr.sql指令碼.txtSQL指令碼
- 最佳化sql的利器SQLTSQL
- Oracle SQL的最佳化[轉]OracleSQL
- Oracle SQL Like 的最佳化OracleSQL
- sql語句的最佳化SQL
- 《編寫可讀程式碼的藝術》讀書筆記(上)表面層次的改進筆記
- PL/SQL解數獨在簡單優化基礎上的改進SQL優化
- Developer Console改進功能,讓訂單管理更高效Developer
- 小專案開始未分層,但後來業務複雜,如何改進?