當需要查詢大量資料的時候,引擎層訪問資料、SQL層的互動和計算都會佔用大量的開銷。PolarDB MySQL版會將最佳化器掃描下推到引擎層進行計算,極大的減少效能開銷,提升查詢效能。
前提條件
叢集版本需為PolarDB MySQL版8.0版本且修訂版本需滿足如下條件:
8.0.1.1.5或以上。
8.0.2.2.0 或以上。
如何查看叢集版本,請參見查詢版本號碼。
背景資訊
在社區MySQL版本8.0.13中,count(*)
操作並沒有由InnoDB引擎執行,每一行訪問的互動代價依然很大。在社區MySQL版本8.0.18中,其並行掃描雖然實現了在InnoDB引擎中快速遍曆page中的行記錄,但引擎會忽視最佳化器選擇的路徑,強制選擇主鍵路徑。
PolarDB MySQL版真正實現了掃描的完全下推,它會在最佳化器選擇的索引page上快速遍曆(FastTraverse)資料行。同時也規避了回表、MVCC恢複快照版本長時間持有page鎖對資料更新的影響。
使用方法
掃描完全下推(FastTraverse)功能在支援的版本上預設開啟。
樣本
本文基於TPCH的Schema進行舉例。執行EXPLAIN SQL查看執行計畫。
mysql> EXPLAIN SELECT COUNT(*) FROM lineitem\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: lineitem
partitions: NULL
type: index
possible_keys: NULL
key: i_l_shipdate
key_len: 4
ref: NULL
rows: 59440464
filtered: 100.00
Extra: Using index
效能效果
基於TPCH 10 scale的資料,針對上文所述的查詢樣本。社區MySQL 8.0.13版本、社區MySQL 8.0.18版本(innodb_parallel_read_threads
取值為1)與PolarDB的效能對比如下: