すべてのプロダクト
Search
ドキュメントセンター

Tablestore:セカンダリインデックスの作成

最終更新日:Apr 30, 2026

セカンダリインデックス機能を使用すると、データテーブルのプライマリキー列およびセカンダリインデックスのインデックスキー列でデータのクエリが可能です。属性列に対するクエリを高速化するには、データテーブルにセカンダリインデックスを作成してください。セカンダリインデックスを作成する際は、そのインデックスキー列または属性列として、テーブル作成時に定義された事前定義列を指定します。

説明
  • セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。詳細については、「概要」をご参照ください。

  • CreateTable 操作を呼び出すことで、データテーブル作成時にインデックステーブルを作成することもできます。詳細については、「データテーブルの作成」をご参照ください。

前提条件

作業を開始する前に、以下の条件を満たしていることを確認してください。

  • 初期化済みの OTSClient インスタンスがあること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。

  • maxVersions1 に設定されたデータテーブルがあること。このデータテーブルの timeToLive パラメーターは、以下のいずれかの条件を満たす必要があります。

    • timeToLive-1 に設定されている(データが有効期限切れにならないことを意味します)。

    • timeToLive-1 以外の値に設定されており、かつデータテーブルに対する更新操作が禁止されている。

  • データテーブルに対して事前定義列が指定されていること。

注意事項

  • Tablestore SDK for .NET はグローバルセカンダリインデックスのみをサポートしています。ローカルセカンダリインデックスを作成する場合は、他のプログラミング言語用の Tablestore SDK、Tablestore コンソール、または Tablestore CLI を使用してください。

  • インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前と重複してはいけません。

  • セカンダリインデックスを作成すると、Tablestore はインデックスキー列として指定されていないデータテーブルのプライマリキー列を自動的にセカンダリインデックスのプライマリキー列として追加します。

パラメーター

パラメーター

説明

mainTableName

データテーブルの名前。

indexMeta

インデックステーブルのスキーマ。このパラメーターには以下のフィールドが含まれます。

  • indexName:インデックステーブルの名前。

  • primaryKey:インデックステーブルのプライマリキー。これは、事前定義列とデータテーブルのすべてのプライマリキー列を組み合わせたものです。

  • definedColumns:インデックステーブルの属性列。これは、データテーブルの事前定義列のサブセットです。

  • indexUpdateMode:インデックステーブルの更新モード。有効値:IUM_ASYNC_INDEX。

  • indexType:インデックステーブルのタイプ。有効値:IT_GLOBAL_INDEX。

以下の例では、データテーブルの既存データを含めないグローバルセカンダリインデックスを作成します。データテーブルには 2 つのプライマリキー列(pk1 および pk2)があります。インデックスキー列は col1、属性列は col2 です。結果として生成されるインデックステーブルには 3 つのプライマリキー列(col1pk1、および pk2)と 1 つの属性列(col2)が含まれます。

public static void CreateGlobalIndex(OTSClient otsClient, String TableName, String IndexName)
{
    Console.WriteLine("Start create globalIndex...");
    IndexMeta indexMeta = new IndexMeta(IndexName);
    // インデックステーブルのプライマリキー列を指定します。
    indexMeta.PrimaryKey = new List<string>() { "col1" };
    // インデックステーブルの属性列を指定します。
    indexMeta.DefinedColumns = new List<string>() { "col2" };
    //indexMeta.IndexType = IndexType.IT_GLOBAL_INDEX;
    //indexMeta.IndexUpdateModel = IndexUpdateMode.IUM_ASYNC_INDEX;

    CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
    CreateGlobalIndexRequest request = new CreateGlobalIndexRequest(TableName, indexMeta);
    otsClient.CreateGlobalIndex(request);

    Console.WriteLine("Global Index is created,tableName: " + TableName + ",IndexName:" + IndexName);

 }

次のステップ