全部產品
Search
文件中心

Tablestore:計算下推

更新時間:Jan 17, 2025

多元索引提供了條件過濾、彙總、排序等功能,在建立多元索引後,使用SQL查詢時,系統能夠充分利用多元索引的計算能力,將部分SQL計算任務下推到多元索引執行,避免全表掃描,從而提高計算效率。

說明

關於多元索引的更多資訊,請參見多元索引

使用情境

如果多元索引包含SQL中涉及的資料列,則SQL引擎會通過多元索引讀取資料並下推多元索引支援的運算元。例如有一張表exampletable有a、b、c和d四列,多元索引中包含了a、b和c三列並均建立了索引,只有當SQL語句中只涉及a、b和c中的資料列時,才會通過多元索引讀取資料。

SELECT a, b, c, d FROM exampletable; /* 多元索引不包含a,b,c,d,掃描全表讀取資料,不支援運算元下推 */
SELECT a, b, c FROM exampletable;    /* 多元索引包含a,b,c,通過多元索引讀取資料,支援運算元下推 */

注意事項

如果SQL語句中的WHERE條件存在與實際欄位類型不一致的運算式,則會導致這部分的運算式無法下推到多元索引,進而影響整體的SQL執行效率。

例如a、b的欄位類型均為BIGINT,當使用的WHERE條件為 WHERE a = '123' and b = 234時,由於a = '123'存在隱式CAST操作將不能被下推到多元索引,只有b = 234會被下推。如需實現完整的運算式下推,請將WHERE條件修改為 a = 123 and b = 234

前提條件

支援下推的運算元

當前SQL語句中支援下推到多元索引執行的運算元說明請參見下表。

運算元類型

下推運算元

下推限制

邏輯運算子

AND、OR

不支援NOT運算元下推。

關係運算子

=、!=、<、<=、>、>=、BETWEEN ... AND ...

只有資料列和常數的比較才支援運算元下推,不支援資料列和資料列比較的運算元下推。

SELECT * FROM exampletable WHERE a > 1;  /* 資料列和常數比較,支援運算元下推 */
SELECT * FROM exampletable WHERE a > b;  /* 資料列和資料列比較,不支援運算元下推 */

彙總函式

  • 基礎彙總:MIN、MAX、COUNT、AVG、SUM、ANY_VALUE

  • 去重彙總:COUNT(DISTINCT col_name)

  • 分組函數:GROUP BY col_name

彙總函式可以對全部資料或者GROUP BY分組中的資料進行彙總,只有彙總函式支援下推並且函數參數為資料列時才支援運算元下推。

SELECT COUNT(*) FROM exampletable;           /* 特殊用法COUNT(*),支援運算元下推 */
SELECT SUM(a) FROM exampletable;             /* 參數為資料列,支援運算元下推 */
SELECT a, b FROM exampletable GROUP BY a, b; /* 按照資料列分組,支援運算元下推 */
SELECT a FROM exampletable GROUP BY a+1;     /* 按照運算式分組,不支援運算元下推 */
SELECT SUM(a+b) FROM exampletable;           /* 參數為運算式,不支援運算元下推 */

LIMIT

  • LIMIT row_count

  • ORDER BY col_name LIMIT row_count

ORDER BY的參數為資料列時才支援運算元下推。

SELECT * FROM exampletable ORDER BY a LIMIT 1;     /* 按照資料列排序,支援運算元下推 */
SELECT * FROM exampletable ORDER BY a, b LIMIT 1;  /* 按照資料列排序,支援運算元下推 */
SELECT * FROM exampletable ORDER BY a+1 LIMIT 1;   /* 按照運算式排序,不支援運算元下推 */