全部產品
Search
文件中心

Tablestore:計算下推

更新時間:Jul 05, 2024

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

說明

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

使用情境

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

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

前提條件

支援下推的運算元

當前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;   /* 按照運算式排序,不支援運算元下推 */