本文通過對原生Tablestore查詢、二級索引(Secondary Index)和多元索引(Search Index)三種查詢情境進行詳細分析,為您提供索引的選擇建議。

原生Tablestore

Tablestore的資料查詢依賴主鍵,主要是通過主鍵點查詢(GetRow)和主鍵範圍查詢(GetRange)。如需對屬性列進行查詢,需要使用Filter功能,在資料量很大的時候效率不高,甚至變成全表掃描。更多資訊,請參見讀取資料

在實際業務中,主鍵查詢也常常不能滿足需求,而使用Filter在巨量資料量時效率很低。Tablestore推出了二級索引和多元索引兩個功能來彌補原生Tablestore查詢方式單一的缺點。

二級索引

為資料表建立二級索引後,相當於多了一張Tablestore表,所以索引表的模型與Tablestore表一致。索引表相當於給資料表提供了另外一種排序方式,即對查詢條件預先設計了一種資料分布,加快資料查詢的效率。更多資訊,請參見二級索引簡介

索引表的查詢方式仍然是基於主鍵點查、主鍵範圍查、主鍵首碼範圍查詢。為了確保主鍵的唯一性,Tablestore會將資料表的主鍵列自動補齊到索引表中。

二級索引包括全域二級索引和本地二級索引,詳細說明請參見下表。

名稱區別
全域二級索引
  • 以非同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,正常情況下同步延遲達到毫秒層級。
  • 索引表的第一列主鍵可根據需要選擇任意主鍵列或者預定義列。
本地二級索引
  • 以同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,當資料寫入資料表後,即可從索引表中查詢到資料。
  • 索引表的第一列主鍵必須和資料表的第一列主鍵相同。

多元索引

多元索引相比資料表主鍵查詢和二級索引,底層增加了倒排索引、多維空間索引等,支援多欄位自由組合查詢、模糊查詢、地理位置查詢、全文檢索索引等。更多資訊,請參見多元索引簡介

多元索引的功能比二級索引更加豐富,而且一個多元索引可以滿足多種維度查詢,支援多種查詢條件,因此命名為多元索引。

索引選擇

  • 不一定需要索引
    • 如果基於主鍵和主鍵範圍查詢的功能已經可以滿足業務需求,則不需要建立索引。
    • 如果對某個範圍內進行篩選,範圍內資料量不大或者查詢頻率不高,則可以使用Filter功能,不需要建立索引。
    • 如果是某種複雜查詢,執行頻率較低且對延遲不敏感,則可以考慮通過DLA(資料湖分析)服務訪問Tablestore,使用SQL進行查詢。
  • 二級索引或者多元索引

    一個二級索引是一個索引表,類似於資料表,其提供了另一種資料分布方式或者認為是另一種主鍵排序方式。一個索引對應一種查詢條件,預先將符合查詢條件的資料排列在一起,查詢效率很高。索引表可支撐的資料規模與資料表相同,此外,二級索引的主鍵設計也同樣需要考慮散列問題。

    一個多元索引是一系列資料結構的組合,其中的每一列都支援建立倒排索引等結構,查詢時可以按照其中任意一列進行排序。一個多元索引可以支援多種查詢條件,不需要對不同查詢條件建立多個多元索引。相比二級索引,也支援多條件組合查詢、模糊查詢、全文索引、地理位置查詢等。多元索引本質上是通過各種資料結構加快了資料的篩選過程,功能豐富,但在資料按照某種固定順序讀取的情境上,效率不如二級索引。多元索引的查詢效率與倒排鏈長度等因素相關,即查詢效能與整個表的全量資料規模有關,在資料規模達到百億行以上時,建議使用路由鍵(RoutingKey)對資料進行分區,查詢時也通過指定RoutingKey查詢來減少查詢涉及到的資料量。簡而言之,查詢靈活度和資料規模不可兼得。