二級索引相當于把數據表的主鍵查詢能力擴展到了不同的列,當需要使用屬性查詢數據時,您可以通過創建二級索引加快數據查詢的效率。設置預定義列后,在創建二級索引時將預定義列作為索引表的索引列或者屬性列。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已創建數據表,且數據表的最大版本數(MaxVersions)必須為1,數據生命周期(TimeToLive)必須滿足如下條件中的任意一個。
數據表的數據生命周期為-1(數據永不過期)。
數據表的數據生命周期不為-1時,數據表為禁止更新狀態。
數據表已設置預定義列。
注意事項
索引表名稱不能與已存在的時序表名稱和數據表名稱相同。
創建二級索引時,系統會自動將未出現在索引列中的數據表主鍵補齊到索引表主鍵中。
創建本地二級索引時,索引表的第一列主鍵必須與數據表的第一列主鍵相同。
參數
參數 | 說明 |
MainTableName | 數據表名稱。 |
IndexMeta | 索引表的結構信息,包括如下內容:
|
IncludeBaseData | 索引表中是否包含數據表中已存在的數據。 當設置IncludeBaseData為true時,表示包含存量數據;設置IncludeBaseData為false時,表示不包含存量數據。 |
示例
創建全局二級索引
以下示例用于在主鍵為pk1、pk2的數據表上創建主鍵列為definedcol1,屬性列為definedcol2的索引表。該索引為全局二級索引且包括存量數據。該索引表的完整主鍵為definedcol1、pk1、pk2,屬性列為definedcol2。
func CreateGlobalIndexSample(client *tablestore.TableStoreClient, tableName string) {
//新建索引表Meta。
indexMeta := new(tablestore.IndexMeta)
//設置數據表的definedcol1列作為索引表的主鍵。
indexMeta.AddPrimaryKeyColumn("definedcol1")
//設置數據表的definedcol2列作為索引表的屬性列。
indexMeta.AddDefinedColumn("definedcol2")
//設置索引表名稱。
indexMeta.IndexName = "<INDEX_NAME>"
indexReq := &tablestore.CreateIndexRequest{
//添加索引表到數據表。
MainTableName:tableName,
IndexMeta: indexMeta,
/**
通過將IncludeBaseData參數設置為true,創建索引表后會開啟數據表中存量數據的同步,然后可以通過索引表查詢全部數據,
同步時間跟數據量的大小有一定的關系。
*/
IncludeBaseData: true,
}
resp, err := client.CreateIndex(indexReq)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create index finished", resp)
}
}
創建本地二級索引
以下示例用于在主鍵為pk1、pk2的數據表上創建主鍵列為pk1、definedcol1,屬性列為definedcol2的索引表。該索引為本地二級索引且包括存量數據。該索引表的完整主鍵為pk1、definedcol1、pk2,屬性列為definedcol2。
func CreateGLocalIndexSample(client *tablestore.TableStoreClient, tableName string) {
//新建索引表Meta。
indexMeta := new(tablestore.IndexMeta)
//索引表的第一列主鍵必須與數據表的第一列主鍵相同。
indexMeta.AddPrimaryKeyColumn("pk1")
//設置數據表的definedcol1列作為索引表的主鍵。
indexMeta.AddPrimaryKeyColumn("definedcol1")
//設置數據表的definedcol2列作為索引表的屬性列。
indexMeta.AddDefinedColumn("definedcol2")
//設置索引類型為本地二級索引(IT_LOCAL_INDEX)。
indexMeta.IndexType = tablestore.IT_LOCAL_INDEX
//設置索引表名稱。
indexMeta.IndexName = "<INDEX_NAME>"
indexReq := &tablestore.CreateIndexRequest{
//添加索引表到數據表。
MainTableName:tableName,
IndexMeta: indexMeta,
/**
通過將IncludeBaseData參數設置為true,創建索引表后會開啟數據表中存量數據的同步,然后可以通過索引表查詢全部數據,
同步時間跟數據量的大小有一定的關系。
*/
IncludeBaseData: true,
}
resp, err := client.CreateIndex(indexReq)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create index finished", resp)
}
}
相關文檔
創建二級索引后,您可以單行讀取或者范圍讀取數據。具體操作,請參見使用二級索引讀取數據。
如果不再需要使用二級索引,您可以刪除二級索引。具體操作,請參見刪除二級索引。