查詢帶分布鍵條件
更新時間 2025-02-05 09:36:57
最近更新時間: 2025-02-05 09:36:57
分享文章
本頁介紹天翼云TeleDB數據庫查詢帶分布鍵條件的最佳實踐。
通過explain查看執行計劃,查看SQL語句是否使用到分布鍵,DN下發DN情況可通過Node/s: 關鍵字來查看。
如果使用到了分布鍵,那么SQL只會下發到分布鍵對應的某個DN節點;如果沒有用到分布鍵,那么SQL會下發到所有DN節點;沒有帶分布鍵的SQL,因為下發到了所有DN節點,消耗了更多的連接資源、計算資源,應盡量避免。
某個表的SQL語句可能有不同的where條件,在SQL優化時,應盡量確保高頻并發的SQL語句是帶了分布鍵條件。
例如,teledb_1表的分布鍵f2,下面的SQL where條件為f1=1,沒有帶分布鍵條件,那么SQL將下發到所有DN節點執行。
teledb=# explain select * from teledb_1 where f1=1;
QUERY PLAN
--------------------------------------------------------------------------------
Remote Fast Query Execution (cost=0.00..0.00 rows=0 width=0)
Node/s: dn001, dn002
-> Gather (cost=1000.00..7827.20 rows=1 width=14)
Workers Planned: 2
-> Parallel Seq Scan on teledb_1 (cost=0.00..6827.10 rows=1 width=14)
Filter: (f1 = 1)
(6 rows)
下面的SQL,where條件為f2=1,帶了分布鍵條件,SQL只下發到了f2=1所在的DN節點dn001。
teledb=# explain select * from teledb_1 where f2=1;
QUERY PLAN
--------------------------------------------------------------------------------
Remote Fast Query Execution (cost=0.00..0.00 rows=0 width=0)
Node/s: dn001
-> Gather (cost=1000.00..7827.20 rows=1 width=14)
Workers Planned: 2
-> Parallel Seq Scan on teledb_1 (cost=0.00..6827.10 rows=1 width=14)
Filter: (f2 = 1)
(6 rows)