二級索引介紹
當(dāng)某些應(yīng)用需要使用不同屬性作為查詢條件來執(zhí)行數(shù)據(jù)查詢時,您可以通過將這些屬性作為二級索引的主鍵列實現(xiàn)按照屬性快速查詢數(shù)據(jù)的需求。表格存儲提供了本地二級索引和全局二級索引來滿足您不同讀取一致性要求的查詢場景。本文介紹了二級索引的基本概念、索引類型、功能特性、注意事項等信息。
背景信息
表格存儲的數(shù)據(jù)表是通過指定主鍵來實現(xiàn)表中數(shù)據(jù)的查詢。但是,通常情況下很多應(yīng)用可能需要通過數(shù)據(jù)表主鍵以外的屬性對數(shù)據(jù)進行查詢。為了解決此問題,您可以為數(shù)據(jù)表創(chuàng)建一個或多個二級索引,然后使用索引表查詢數(shù)據(jù)。
二級索引相當(dāng)于把數(shù)據(jù)表的主鍵查詢能力擴展到了不同的列,使用二級索引能加快數(shù)據(jù)查詢的效率。創(chuàng)建二級索引時,您需要將要查詢的多個屬性作為索引表的主鍵列,然后使用索引表的主鍵列快速查詢所需數(shù)據(jù)。具體樣例場景說明請參見使用場景。
基本概念
名詞 | 描述 |
索引表 | 對數(shù)據(jù)表中某些列數(shù)據(jù)的索引。 索引表只能用于讀取數(shù)據(jù),不能寫入數(shù)據(jù)。 |
預(yù)定義列 | 在創(chuàng)建數(shù)據(jù)表時預(yù)先定義一些非主鍵列以及其類型,作為索引表的索引列或者屬性列。 說明 表格存儲為Schema-free模型,原則上一行數(shù)據(jù)可以寫入任意屬性列,無需在SCHEMA中指定屬性列。 |
單列索引 | 只為某一列建立索引。 |
組合索引 | 多個列組合成索引,組合索引中包含組合索引列1、列2。 |
索引表屬性列 | 被映射到索引表中的預(yù)定義列。 |
索引列補齊 | 系統(tǒng)自動將未出現(xiàn)在索引列中的數(shù)據(jù)表主鍵補齊到索引表主鍵中。 |
索引類型
表格存儲提供了全局二級索引和本地二級索引兩種類型的索引。全局二級索引以異步方式將數(shù)據(jù)表中被索引的列和主鍵列的數(shù)據(jù)自動同步到索引表中,正常情況下同步延遲達到毫秒級別。
為了滿足用戶的強一致性查詢等需求,表格存儲推出了本地二級索引。本地二級索引以同步方式將數(shù)據(jù)表中被索引的列和主鍵列的數(shù)據(jù)自動同步到索引表中,當(dāng)數(shù)據(jù)寫入數(shù)據(jù)表后,即可從索引表中查詢到數(shù)據(jù)。
全局二級索引和本地二級索引在同步方式、對第一列主鍵要求、同步延遲和讀取一致性方面的區(qū)別請參見下表說明。
維度 | 全局二級索引 | 本地二級索引 |
同步方式 | 異步方式 | 同步方式 |
第一列主鍵要求 | 可選數(shù)據(jù)表中的任意主鍵列或者預(yù)定義列 | 必須和數(shù)據(jù)表的第一列主鍵相同 |
同步延遲 | 毫秒級別 | 實時 |
讀取一致性 | 最終一致性 | 強一致性 |
功能特性
二級索引的功能特性包括單列索引和組合索引、索引同步、覆蓋索引(Covered Indexes)、存量索引和稀疏索引(Sparse Indexes)。具體介紹請參見下表說明。
功能特性 | 說明 |
單列索引和組合索引 | 支持為數(shù)據(jù)表中的某一列或者多個列建立索引。 |
索引同步 | 全局二級索引和本地二級索引的數(shù)據(jù)同步方式不同。
|
覆蓋索引 | 支持索引表中帶有屬性列。在創(chuàng)建數(shù)據(jù)表時預(yù)先定義一些列(稱為預(yù)定義列)后,您可以對任意預(yù)定義列和數(shù)據(jù)表主鍵列進行索引,指定數(shù)據(jù)表的若干個預(yù)定義列作為索引表屬性列。索引表中也可以不包含任何屬性列。 當(dāng)指定數(shù)據(jù)表的若干個預(yù)定義列作為索引表屬性列時,讀取索引表可以直接得到數(shù)據(jù)表中對應(yīng)預(yù)定義列的值,無需反查數(shù)據(jù)表。 |
存量索引 | 支持新建的索引表中包含數(shù)據(jù)表中的存量數(shù)據(jù)。 |
稀疏索引 | 如果數(shù)據(jù)表的某個預(yù)定義列作為索引表的屬性列,當(dāng)數(shù)據(jù)表某行中不存在該預(yù)定義列時,只要索引列全部存在,仍會為此行建立索引。但是如果部分索引列缺失,則不會為此行建立索引。 例如數(shù)據(jù)表有PK0、PK1、PK2三列主鍵,Defined0、Defined1、Defined2三列預(yù)定義列,設(shè)置索引表主鍵為PK0、Defined0、Defined1,索引表屬性列為Defined2。
|
使用限制
更多信息,請參見二級索引限制。
注意事項
創(chuàng)建索引表時的注意事項
系統(tǒng)會自動對索引表進行索引列補齊。在對索引表進行掃描時,請注意填充對應(yīng)主鍵列的范圍(一般為負無窮到正無窮)。
在創(chuàng)建索引表時,只需要指定索引列,其他列會由系統(tǒng)自動添加。例如數(shù)據(jù)表有PK0和PK1兩列主鍵,Defined0作為預(yù)定義列。
使用全局二級索引時,根據(jù)實際需要創(chuàng)建索引。
如果在Defined0上創(chuàng)建索引,則生成的索引表主鍵會是Defined0、PK0、PK1三列。
如果在Defined0和PK1上創(chuàng)建索引,則生成的索引表主鍵會是Defined0、PK1、PK0三列。
如果在PK1上創(chuàng)建索引,則生成的索引表主鍵會是PK1、PK0兩列。
使用本地二級索引時,索引表的第一個主鍵列必須與數(shù)據(jù)表的第一個主鍵列相同。
如果在PK0和Defined0上創(chuàng)建索引,則生成的索引表主鍵會是PK0、Defined0、PK1三列。
如果在PK0、PK1和Defined0上創(chuàng)建索引,則生成的索引表主鍵會是PK0、PK1、Defined0三列。
如果在PK0和PK1上創(chuàng)建索引,則生成的索引表主鍵會是PK0、PK1兩列。
根據(jù)查詢模式和成本的考慮選擇合適的數(shù)據(jù)表預(yù)定義列作為索引表屬性列。
將數(shù)據(jù)表的一個預(yù)定義列作為索引表的屬性列后,查詢數(shù)據(jù)時無需反查數(shù)據(jù)表即可得到該列的值,但是同時增加了相應(yīng)的存儲成本。反之則需要根據(jù)索引表反查數(shù)據(jù)表。
使用全局二級索引時,請選擇合適的列作為索引表的第一個主鍵列。
由于可能導(dǎo)致索引表更新速度變慢,不建議把時間相關(guān)列作為索引表主鍵的第一列。
建議將時間列進行哈希,然后在哈希后的列上創(chuàng)建索引,如果有需求請使用釘釘聯(lián)系表格存儲技術(shù)支持。
由于會導(dǎo)致索引表水平擴展能力受限,影響索引表寫入性能,不建議將取值范圍非常小,甚至可枚舉的列作為索引表主鍵的第一列,例如性別。
使用索引表時的注意事項
在帶有索引表的數(shù)據(jù)表中寫入數(shù)據(jù)時需遵循如下規(guī)則,否則在數(shù)據(jù)表中寫入數(shù)據(jù)會失敗。
寫入數(shù)據(jù)時,不能自定義數(shù)據(jù)的版本號。
批量寫入數(shù)據(jù)時,一個批量寫請求中,同一行數(shù)據(jù)(即主鍵相同)不能重復(fù)存在。
索引表只能用于查詢數(shù)據(jù),不能直接寫入數(shù)據(jù)。
接口
使用二級索引的相關(guān)接口請參見下表。
接口 | 說明 |
為已存在的數(shù)據(jù)表創(chuàng)建索引表。 說明
| |
單行讀取索引表中數(shù)據(jù)。 | |
范圍讀索引表中數(shù)據(jù)。 | |
刪除數(shù)據(jù)表上指定的索引表。 重要 使用DeleteTable接口刪除數(shù)據(jù)表前,必須先刪除數(shù)據(jù)表下的索引,否則數(shù)據(jù)表將刪除失敗。 |
使用方式
您可以通過控制臺、命令行工具或者SDK使用二級索引。
計費說明
使用二級索引功能將產(chǎn)生額外的數(shù)據(jù)存儲量。當(dāng)向數(shù)據(jù)表寫入數(shù)據(jù)時,在建立索引的過程中以及讀取數(shù)據(jù)時會消耗計算資源。
表格存儲包括VCU模式(原預(yù)留模式)和CU模式(原按量模式)兩種計費模式。使用不同的計費模式時,計費方式不同。
計費模式 | 計費說明 |
VCU模式(原預(yù)留模式)以包年包月方式預(yù)先購買計算能力,計算能力中涵蓋二級索引操作、讀寫數(shù)據(jù)的計算消耗。 索引的數(shù)據(jù)存儲量與數(shù)據(jù)表無區(qū)別,按照不同存儲類型收費。更多信息,請參見數(shù)據(jù)存儲量。 | |
更多信息,請參見二級索引計量計費。 CU模式(原按量模式)是根據(jù)實際計算消耗折算成CU進行計費。同時根據(jù)實例規(guī)格不同,計費時需要區(qū)分按量讀寫CU以及預(yù)留讀寫CU。 索引表數(shù)據(jù)存儲量與數(shù)據(jù)表無區(qū)別,數(shù)據(jù)存儲類型與實例規(guī)格綁定。更多信息,請參見數(shù)據(jù)存儲量。 |
相關(guān)文檔
如果需要更靈活豐富的數(shù)據(jù)加速查詢方式,例如多條件組合查詢、全文檢索、前綴查詢、模糊查詢等,您可以使用多元索引實現(xiàn)。更多信息,請參見多元索引簡介。