全部產品
Search
文件中心

Tablestore:索引選擇策略

更新時間:Jan 23, 2025

Tablestore作為海量結構化巨量資料儲存,支援不同的索引結構,便於不同情境下進行查詢分析加速使用。本文介紹在資料表上存在多元索引和二級索引時如何選擇SQL查詢所使用的索引。

說明

關於二級索引和多元索引的更多資訊,請分別參見二級索引多元索引簡介

使用資料表映射表

當資料表上存在二級索引和多元索引時,使用SQL查詢會涉及到多個索引的選擇,索引選擇策略包括自動選擇策略和手動選擇策略。

重要

請確保已在資料表上建立映射關係。具體操作,請參見建立表的映射關係

自動選擇策略

使用資料表的映射表查詢資料時,Tablestore會自動選擇資料表、二級索引或多元索引進行資料查詢。

重要
  • 如果建立表的映射關係時設定了執行的查詢結果要滿足強一致性或者不允許通過犧牲彙總操作的精度提升查詢效能,則Tablestore不會自動選擇多元索引進行資料查詢。

  • 當二級索引和多元索引同時包含SQL查詢涉及的所有列時,Tablestore會優先選擇多元索引進行資料查詢。

自動選擇策略由上到下依次執行。具體執行流程如下:

  1. 自動選擇多元索引:如果WHERE子句中的所有過濾列、彙總計算和排序涉及的列均包含在同一個多元索引中,則Tablestore會自動選擇該多元索引進行資料查詢。

    例如SELECT A,B,C FROM sampletable WHERE A=XXX and D = YY;語句,如果A、B、C、D列均在sampletable表上的同一個多元索引中,則會自動選擇到多元索引進行查詢。

    此外,當Groupby、彙總函式等組合使用時,如果符合多元索引Search介面的統計彙總能力,則Tablestore也會進行識別並下推運算元,關於下推運算元的更多資訊,請參見計算下推

  2. 自動選擇二級索引:如果二級索引能比資料表命中更多的WHERE子句中的主鍵條件(遵循最左匹配原則),且覆蓋了SQL查詢涉及的所有列,則Tablestore會自動選擇該二級索引進行資料查詢。

    例如資料表主鍵為a、b,資料表上某個二級索引的主鍵為c、a、b,當查詢條件為c = 1 and a > 1時,二級索引命中兩個主鍵列,資料表命中一個主鍵列,則會自動選擇到二級索引進行查詢。

  3. 自動選擇資料表或二級索引:根據SQL引擎內部的CBO邏輯從資料表或二級索引間進行選擇,此時的選擇結果與具體SQL的Pattern有關,SQL引擎會盡量選擇代價較低的索引來執行查詢。

手動選擇策略

當要在查詢資料時穩定地選擇某一個索引時,您可以通過use index文法顯式指定索引或者直接使用索引的映射表。

此處以資料表名為sampletable,多元索引名為sampletable_search_index,二級索引名為sampletable_secondary_index為例介紹手動選擇策略的操作。

  • 顯式指定訪問資料表

    在SQL語句中顯式指定訪問資料表。SQL樣本如下:

    SELECT * FROM sampletable use index();
  • 顯式指定訪問多元索引或二級索引

    說明

    如果索引中不包含SQL查詢相關的列,則SQL引擎會自動反查資料表以擷取所需資料。

    在SQL語句中顯式指定要訪問的索引。SQL樣本如下:

    SELECT * FROM sampletable use index(sampletable_search_index); --顯式訪問多元索引
    SELECT * FROM sampletable use index(sampletable_secondary_index); --顯式訪問二級索引

使用二級索引映射表

當要通過指定的二級索引查詢資料時,您可以直接使用二級索引映射關係進行查詢。具體操作如下:

說明

使用索引映射表查詢資料時,只能查詢索引中包含的資料列。

  1. 使用CREATE TABLE語句建立二級索引表的映射關係。具體操作,請參見建立表的映射關係

  2. 使用SELECT語句通過二級索引映射表查詢資料。具體操作,請參見查詢資料

使用多元索引映射表

當要通過指定的多元索引查詢資料時,您可以直接使用多元索引映射關係進行查詢。具體操作如下:

說明

使用索引映射表查詢資料時,只能查詢索引中包含的資料列。

  1. 使用CREATE TABLE語句建立多元索引的映射關係。具體操作,請參見建立多元索引的映射關係

  2. 使用SELECT語句通過多元索引映射表查詢資料。具體操作,請參見查詢資料

附錄:多元索引中功能與SQL運算式的映射

多元索引能夠實現與SQL運算式相同的功能,具體功能映射資訊請參見下表。

SQL運算式

樣本

多元素引中功能

without predicate

不涉及

全匹配查詢(MatchAllQuery)

=

  • a = 1

  • b = "hello world"

精確查詢(TermQuery)

>

a > 1

範圍查詢(RangeQuery)

>=

a >= 2

<

a < 5

<=

a <= 10

is null

a is null

列存在性查詢(ExistsQuery)

is not null

a is not null

and

a = 1 and b = "hello world"

多條件組合查詢(BoolQuery)

or

a > 1 or b = 2

not

not a = 1

!=

a !=1

like

a like "%s%"

萬用字元查詢(WildcardQuery)

in

a in (1,2,3)

多詞精確查詢(TermsQuery)

text_match

text_match(a, "tablestore cool")

匹配查詢(MatchQuery)

text_match_phrase

text_match_phrase(a, "tablestore cool")

短語匹配查詢(MatchPhraseQuery)

array_extract

array_extract(col_long)

數組和巢狀型別

nested_query

nested_query(`tags.tagName` = 'tag1' AND `tags.score` = 0.2)

order by

nested_query col_long

排序和翻頁

limit

limit 10

min()

min(col_long)

統計彙總

max()

max(col_long)

sum()

sum(col_long)

avg()

avg(col_long)

count()

count(col_long)

count(distinct)

count(distinct col_long)

any_value()

any_value(col_long)

group by

group by col_long

相關文檔

使用多元索引加速SQL查詢資料時,您可以通過多元索引實現全文檢索索引多元索引數群組類型多元索引巢狀型別多元索引虛擬列等功能。