全部產品
Search
文件中心

PolarDB:掃描完全下推(FastTraverse)

更新時間:Jul 06, 2024

當需要查詢大量資料的時候,引擎層訪問資料、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的效能對比如下:掃描下推效果