分區剪枝是指最佳化器自動從FROM和WHERE子句雷根據分區鍵提取出需要掃描的分區,減少掃描的資料區塊,從而避免全表掃描,提高效能。
分區剪枝機制支援以下兩種剪枝方式:
排除約束
快速剪枝
排除約束
參數constraint_exclusion用於控制排除約束,取值範圍:on、off 或partition,預設為partition。如果參數constraint_exclusion為partition或on,則表示啟用排除約束;如果為off,則表示不啟用。
當您啟用了排除約束,伺服器就會檢查定義給每個分區的約束來決定分區是否能滿足查詢。
當執行不包含WHERE子句的SELECT語句時,查詢計劃會推薦用於搜尋整個表的執行計畫。
當執行包含WHERE子句的SELECT語句時,查詢計劃會決定要儲存記錄的分區,並發送查詢片段給這個分區,然後從執行計畫中剪去不能包含記錄的分區。
如果您不使用分區表功能,則建議禁用排除約束,從而提高效能。
快速剪枝
和排除約束類似,快速剪枝只能對包含WHERE子句的查詢進行最佳化,且只有當WHERE子句中的限定符滿足某種格式時,才可進行最佳化。
參數polar_comp_enable_pruning用於控制快速剪枝,取值範圍:on或off,預設為on。如果參數polar_comp_enable_pruning為on,則表示啟用快速剪枝,快速剪去某些特定的查詢;如果為off,則表示不啟用。
快速剪枝無法最佳化對子分區表的查詢,也無法最佳化分區於多個列上的RANGE分區表的查詢。
快速剪枝的使用說明如下:
對於LIST分區表的查詢,快速剪枝能快速剪去包含WHERE子句的查詢,運算子為等於(=)或IS NULL/IS NOT NULL。
樣本:
首先指定一個LIST分區表:
CREATE TABLE sales_hist(..., country text, ...) PARTITION BY LIST(country) ( PARTITION americas VALUES('US', 'CA', 'MX'), PARTITION europe VALUES('BE', 'NL', 'FR'), PARTITION asia VALUES('JP', 'PK', 'CN'), PARTITION others VALUES(DEFAULT) )
在該LIST分區表的基礎上,使用快速剪枝,提取出包含如下WHERE子句的資訊。
WHERE country = 'US' WHERE country IS NULL;
通過第一個WHERE子句, 快速剪枝將排除分區europe、asia和others,因為這些分區不滿足
WHERE country = 'US'
。通過第二個WHERE子句, 快速剪枝將排除分區americas、europe和asia。因為這些分區不滿足
WHERE country IS NULL
。
對於RANGE分區表的查詢,快速剪枝能快速剪去包含WHERE子句的查詢。運算子可以是等於(=)、大於(>)、大於等於(>=)、小於(<)、小於等於(<=),或IS NULL/IS NOT NULL,也可以是更為複雜的包含運算子AND和 BETWEEN的運算式,例如:
WHERE size > 100 AND size <= 200 WHERE size BETWEEN 100 AND 200
說明快速剪枝不支援包含OR或IN運算子的運算式。
樣本:
首先指定一個RANGE分區表:
CREATE TABLE boxes(id int, size int, color text) PARTITION BY RANGE(size) ( PARTITION small VALUES LESS THAN(100), PARTITION medium VALUES LESS THAN(200), PARTITION large VALUES LESS THAN(300) )
在該RANGE分區表的基礎上,使用快速剪枝,提取出包含如下WHERE子句的資訊。
WHERE size > 100 -- 掃描medium和large分區 WHERE size >= 100 -- 掃描medium和large分區 WHERE size = 100 -- 掃描medium分區 WHERE size <= 100 -- 掃描small和medium分區 WHERE size < 100 -- 掃描small分區 WHERE size > 100 AND size < 199 -- 掃描medium分區 WHERE size BETWEEN 100 AND 199 -- 掃描medium分區 WHERE color = 'red' AND size = 100 -- 掃描medium分區 WHERE color = 'red' AND (size > 100 AND size < 199) -- 掃描medium分區