全部產品
Search
文件中心

Tablestore:建立二級索引

更新時間:Jul 30, 2026

使用 Java SDK 為已有資料表建立全域二級索引或本地二級索引。

前提條件

  • 安裝Tablestore Java SDK並初始化用戶端。

  • 目標資料表的最大版本數為 1,並且資料生命週期為 -1,或者已禁止通過 UpdateRow 更新資料。

  • 如果將非主鍵列作為索引列或屬性列,已將這些列設定為預定義列。

功能說明

二級索引通過重新組合資料表的主鍵列和預定義列,為資料表提供不同於原主鍵的查詢維度。二級索引分為全域二級索引和本地二級索引,兩種索引的資料同步方式和主鍵要求不同。更多資訊,請參見二級索引

調用 createIndex 為已有資料表建立二級索引。如果需要在建立資料表時同時建立一個或多個二級索引,可在 createTable 請求中配置索引結構。具體操作,請參見建立資料表

public CreateIndexResponse createIndex(CreateIndexRequest createIndexRequest)
        throws TableStoreException, ClientException

以下樣本為 example_table 建立全域二級索引 example_global_index。索引表包含存量資料。

IndexMeta indexMeta = new IndexMeta("example_global_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");

CreateIndexRequest request =
        new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);

參數說明

CreateIndexRequest 包含以下參數:

名稱

類型

說明

mainTableName(必選)

String

資料表名稱。

indexMeta(必選)

IndexMeta

索引表的結構資訊。

includeBaseData(必選)

boolean

索引表是否包含資料表中的存量資料。設定為 true 時同步存量資料,同步時間隨資料量變化;設定為 false 時僅同步建立索引後寫入的資料。

索引結構

indexMeta 的類型為 IndexMeta,包含以下參數:

名稱

類型

說明

indexName(必選)

String

索引表名稱,不能與已有的資料表或時序表名稱相同。

primaryKey(必選)

List<String>

索引列名稱的有序列表,可以包含資料表主鍵列和預定義列,需指定 1~4 列。系統按照添加順序設定索引表主鍵,並將未指定為索引列的資料表主鍵自動補充到索引表主鍵的末尾。建立本地二級索引時,第一列索引主鍵必須與資料表的第一列主鍵相同。

definedColumns(可選)

List<String>

索引表的屬性列名稱列表,只能包含資料表的預定義列。

indexType(可選)

IndexType

索引類型。取值為 IT_GLOBAL_INDEXIT_LOCAL_INDEX,預設值為 IT_GLOBAL_INDEX

indexUpdateMode(可選)

IndexUpdateMode

索引更新模式。全域二級索引必須使用 IUM_ASYNC_INDEX,系統以非同步方式同步索引列和主鍵列的資料,正常情況下同步延遲為毫秒級;本地二級索引必須使用 IUM_SYNC_INDEX,系統以同步方式更新索引,資料寫入資料表後即可從索引表中查詢。預設值為 IUM_ASYNC_INDEX

情境樣本

建立本地二級索引

建立本地二級索引時,將資料表的第一列主鍵作為第一列索引主鍵,並將索引類型和更新模式分別設定為 IT_LOCAL_INDEXIUM_SYNC_INDEX

IndexMeta indexMeta = new IndexMeta("example_local_index");
indexMeta.addPrimaryKeyColumn("user_id");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.addDefinedColumn("status");
indexMeta.setIndexType(IndexType.IT_LOCAL_INDEX);
indexMeta.setIndexUpdateMode(IndexUpdateMode.IUM_SYNC_INDEX);

CreateIndexRequest request =
        new CreateIndexRequest("example_table", indexMeta, true);
client.createIndex(request);