セカンダリインデックス機能を使用すると、データテーブルのプライマリキー列およびセカンダリインデックスのインデックスキー列でデータのクエリが可能です。属性列に対するクエリを高速化するには、データテーブルにセカンダリインデックスを作成してください。セカンダリインデックスを作成する際は、そのインデックスキー列または属性列として、テーブル作成時に定義された事前定義列を指定します。
セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。詳細については、「概要」をご参照ください。
CreateTable 操作を呼び出すことで、データテーブル作成時にインデックステーブルを作成することもできます。詳細については、「データテーブルの作成」をご参照ください。
前提条件
作業を開始する前に、以下の条件を満たしていることを確認してください。
初期化済みの OTSClient インスタンスがあること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。
-
maxVersionsが1に設定されたデータテーブルがあること。このデータテーブルのtimeToLiveパラメーターは、以下のいずれかの条件を満たす必要があります。timeToLiveが-1に設定されている(データが有効期限切れにならないことを意味します)。timeToLiveが-1以外の値に設定されており、かつデータテーブルに対する更新操作が禁止されている。
データテーブルに対して事前定義列が指定されていること。
注意事項
Tablestore SDK for .NET はグローバルセカンダリインデックスのみをサポートしています。ローカルセカンダリインデックスを作成する場合は、他のプログラミング言語用の Tablestore SDK、Tablestore コンソール、または Tablestore CLI を使用してください。
インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前と重複してはいけません。
セカンダリインデックスを作成すると、Tablestore はインデックスキー列として指定されていないデータテーブルのプライマリキー列を自動的にセカンダリインデックスのプライマリキー列として追加します。
パラメーター
|
パラメーター |
説明 |
|
mainTableName |
データテーブルの名前。 |
|
indexMeta |
インデックステーブルのスキーマ。このパラメーターには以下のフィールドが含まれます。
|
例
以下の例では、データテーブルの既存データを含めないグローバルセカンダリインデックスを作成します。データテーブルには 2 つのプライマリキー列(pk1 および pk2)があります。インデックスキー列は col1、属性列は col2 です。結果として生成されるインデックステーブルには 3 つのプライマリキー列(col1、pk1、および 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);
}
次のステップ
セカンダリインデックスを作成したら、そのインデックスを使用して単一行または行範囲を読み取ります。詳細については、「セカンダリインデックスを使用したデータの読み取り」をご参照ください。
不要になったセカンダリインデックスを削除する方法については、「セカンダリインデックスの削除」をご参照ください。