全部產品
Search
文件中心

PolarDB:謂詞完全下推

更新時間:Jul 06, 2024

當需要查詢大量資料的時候,引擎層訪問資料、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_ruleON,忽略該限制。具體操作請參見設定叢集參數和節點參數

參數名稱

層級

描述

ignore_polar_optimizer_rule

Global、Session

忽略Polar最佳化限制規則的控制開關。

  • ON:開啟忽略Polar最佳化限制規則開關。

  • OFF(預設值):關閉忽略Polar最佳化限制規則開關。

使用方法

通過系統參數loose_optimizer_switch中的detach_range_condition開啟謂詞完全下推最佳化功能。具體操作請參見設定叢集參數和節點參數

參數名稱

層級

描述

loose_optimizer_switch

Global、Session

查詢最佳化的總控制開關。其中,計算下推的子控制開關如下:

  • limit_offset_pushdown:Limit Offset下推最佳化開關

    • ON(預設值):開啟Limit Offset下推最佳化開關。

    • OFF:關閉Limit Offset下推最佳化開關。

  • detach_range_condition:謂詞完全下推最佳化開關

    • ON(預設值):開啟謂詞完全下推最佳化開關。

    • OFF:關閉謂詞完全下推最佳化開關。

樣本

本文基於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_ruleON,除Limit Offset情境外,其他範圍查詢體現在引擎範圍中的謂詞也可以被消除。以TPCH的Q5和Q6為例,設定ignore_polar_optimizer_ruleON後,可以消除謂詞。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。開啟與關閉謂詞完全下推功能的效能對比如下:謂詞下推