本文通過對原生Tablestore查詢、二級索引(Secondary Index)和多元索引(Search Index)三種查詢情境進行詳細分析,為您提供索引的選擇建議。
背景資訊
Table Store的資料查詢依賴主鍵,主要是通過主鍵點查詢(GetRow)和主鍵範圍查詢(GetRange)。如需對屬性列進行查詢,需要使用Filter功能,在資料量很大的時候效率不高,甚至變成全表掃描。更多資訊,請參見讀取資料。
在實際業務中,主鍵查詢也常常不能滿足需求,而使用Filter在巨量資料量時效率很低。Tablestore推出了二級索引和多元索引兩個功能來彌補原生Tablestore查詢方式單一的缺點。
索引介紹
Table Store提供了二級索引和多元索引用於加速資料查詢。
二級索引
為資料表建立二級索引後,相當於多了一張Tablestore表,所以索引表的模型與Tablestore表一致。索引表相當於給資料表提供了另外一種排序方式,即對查詢條件預先設計了一種資料分布,加快資料查詢的效率。更多資訊,請參見二級索引介紹。
索引表的查詢方式仍然是基於主鍵點查、主鍵範圍查、主鍵首碼範圍查詢。為了確保主鍵的唯一性,Table Store會將資料表的主鍵列自動補齊到索引表中。
Table Store提供了全域二級索引和本地二級索引兩種類型的索引。全域二級索引以非同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,正常情況下同步延遲達到毫秒層級。
為了滿足使用者的強一致性查詢等需求,Table Store推出了本地二級索引。本地二級索引以同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,當資料寫入資料表後,即可從索引表中查詢到資料。
全域二級索引和本地二級索引在同步方式、對第一列主鍵要求、同步延遲和讀取一致性方面的區別請參見下表說明。
維度 | 全域二級索引 | 本地二級索引 |
同步方式 | 非同步方式 | 同步方式 |
第一列主鍵要求 | 可選資料表中的任意主鍵列或者預定義列 | 必須和資料表的第一列主鍵相同 |
同步延遲 | 毫秒層級 | 即時 |
讀取一致性 | 最終一致性 | 強一致性 |
多元索引
多元索引相比資料表主鍵查詢和二級索引,底層增加了倒排索引、多維空間索引等,支援多欄位自由組合查詢、模糊查詢、地理位置查詢、全文檢索索引等。更多資訊,請參見多元索引簡介。
多元索引的功能比二級索引更加豐富,而且一個多元索引可以滿足多種維度查詢,支援多種查詢條件,因此命名為多元索引。
索引選擇
根據查詢條件確定是否需要使用索引。
一般情況下,以下查詢情境無需使用索引。
如果確定要使用索引,請根據實際查詢情境選擇二級索引或者多元索引。
二級索引:一個二級索引是一個索引表,類似於資料表,其提供了另一種資料分布方式或者認為是另一種主鍵排序方式。一個索引對應一種查詢條件,預先將符合查詢條件的資料排列在一起,查詢效率很高。索引表可支撐的資料規模與資料表相同,此外,二級索引的主鍵設計也同樣需要考慮散列問題。
多元索引:一個多元索引是一系列資料結構的組合,其中的每一列都支援建立倒排索引等結構。查詢資料時可以按照其中任意一列進行排序。一個多元索引可以支援多種查詢條件,不需要對不同查詢條件建立多個多元索引。
相比二級索引,多元索引還支援多條件組合查詢、模糊查詢、全文索引、地理位置查詢等。多元索引本質上是通過各種資料結構加快了資料的篩選過程,功能豐富,但在資料按照某種固定順序讀取的情境上效率不如二級索引。多元索引的查詢效率與倒排鏈長度等因素相關,即查詢效能與整個表的全量資料規模有關,在資料規模達到百億行以上時,建議使用路由鍵(RoutingKey)對資料進行分區,查詢資料時通過指定RoutingKey查詢來減少查詢涉及到的資料量。