多元索引提供了條件過濾、彙總、排序等功能,在建立多元索引後,使用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 ... | 只有資料列和常數的比較才支援運算元下推,不支援資料列和資料列比較的運算元下推。
|
彙總函式 |
| 彙總函式可以對全部資料或者GROUP BY分組中的資料進行彙總,只有彙總函式支援下推並且函數參數為資料列時才支援運算元下推。
|
LIMIT |
| ORDER BY的參數為資料列時才支援運算元下推。
|