當需要查詢大量資料的時候,引擎層訪問資料、SQL層的互動和計算都會佔用大量的開銷。PolarDB MySQL版會將謂詞下推到引擎層進行計算,極大的減少效能開銷,提升查詢效能。
前提條件
叢集版本需為PolarDB MySQL版8.0版本且修訂版本需滿足如下條件:
8.0.1.1.5或以上。
8.0.2.2.0 或以上。
如何查看叢集版本,請參見查詢版本號碼。
背景資訊
在社區MySQL中,索引的範圍條件可以用來確定引擎的掃描範圍,使索引僅掃描對應範圍的資料。這些條件在確定引擎的掃描範圍後,依然保留了下來。即對所有引擎輸出的資料再次做對應的SQL計算過濾,而引擎輸出的資料一定會滿足對應的條件。這會增加條件的計算量,同時阻礙一些計算下推到引擎層。PolarDB MySQL版對這些謂詞做了完全的下推,即範圍條件體現在引擎掃描範圍後即可從SQL層消除,從而減少計算量,增加計算下推情境。
使用限制
查詢SQL中的Offset取值要大於512。
您可以配置ignore_polar_optimizer_rule為ON
,忽略該限制。具體操作請參見設定叢集參數和節點參數。
參數名稱 | 層級 | 描述 |
ignore_polar_optimizer_rule | Global、Session | 忽略Polar最佳化限制規則的控制開關。
|
使用方法
通過系統參數loose_optimizer_switch中的detach_range_condition
開啟謂詞完全下推最佳化功能。具體操作請參見設定叢集參數和節點參數。
參數名稱 | 層級 | 描述 |
loose_optimizer_switch | Global、Session | 查詢最佳化的總控制開關。其中,計算下推的子控制開關如下:
|
樣本
本文基於TPCH的Schema進行舉例。關閉謂詞完全下推功能後,Q2的執行計畫如下。可以看到關閉謂詞完全下推功能後,Extra
列展示為Using where
,即體現在引擎範圍中的條件依然保留著。
set @@optimizer_switch='detach_range_condition=off';
EXPLAIN SELECT * FROM lineitem WHERE l_orderkey > 10 AND l_orderkey < 60000000 LIMIT 10000000, 10\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: lineitem
partitions: NULL
type: range
possible_keys: PRIMARY,i_l_orderkey,i_l_orderkey_quantity
key: PRIMARY
key_len: 4
ref: NULL
rows: 29720232
filtered: 100.00
Extra: Using where
設定變數ignore_polar_optimizer_rule
為ON
,除Limit Offset情境外,其他範圍查詢體現在引擎範圍中的謂詞也可以被消除。以TPCH的Q5和Q6為例,設定ignore_polar_optimizer_rule
為ON
後,可以消除謂詞。Extra
列僅顯示為Using index
,不再顯示Using where
。
Q5:
set @@ignore_polar_optimizer_rule=on; EXPLAIN SELECT COUNT(*) FROM lineitem WHERE l_suppkey > 10 AND l_suppkey < 50000\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: lineitem partitions: NULL type: range possible_keys: i_l_suppkey_partkey,i_l_suppkey key: i_l_suppkey key_len: 5 ref: NULL rows: 29720232 filtered: 100.00 Extra: Using index
Q6:
set @@ignore_polar_optimizer_rule=on; EXPLAIN SELECT COUNT(*) FROM LINEITEM WHERE l_receiptDATE > '1992-01-03' AND l_receiptDATE < '1994-12-31'\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: LINEITEM partitions: NULL type: range possible_keys: i_l_receiptdate key: i_l_receiptdate key_len: 4 ref: NULL rows: 29720232 filtered: 100.00 Extra: Using index
效能效果
基於TPCH 10 scale的資料,針對上文所述的查詢樣本Q5、Q6。開啟與關閉謂詞完全下推功能的效能對比如下: