セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、テーブルに作成されたセカンダリインデックスのインデックス列に基づいてデータをクエリできます。これにより、データクエリが高速化されます。セカンダリインデックスを作成する際、そのインデックス列や属性列を、対象テーブルに指定した事前定義列に設定できます。セカンダリインデックスを作成した後、そのセカンダリインデックスを使用してデータをクエリできます。
前提条件
Max Versions パラメーターが 1 に設定されているデータテーブルが作成されていること。データテーブルの Time to Live (TTL) パラメーターが、次のいずれかの条件を満たしていること:
-
データテーブルの Time to Live (TTL) パラメーターが -1 に設定されていること。これは、データテーブル内のデータが失効しないことを示します。
-
データテーブルの Time to Live (TTL) が -1 でない場合、テーブルに対する更新が許可されていないこと。これは、[更新を許可] オプションが いいえ に設定されていることを示します。
セカンダリインデックスの Time to Live (TTL) は、データテーブルの Time to Live (TTL) と同じです。
ステップ 1: (オプション) 事前定義列の追加
セカンダリインデックスを作成するテーブルに事前定義列がない場合や、既存の事前定義列がビジネス要件を満たさない場合は、そのテーブルの事前定義列を追加または削除できます。
データテーブルの作成時に、事前定義列を追加することもできます。詳細については、「ステップ 3:データテーブルの作成」をご参照ください。
-
テーブル管理 ページに移動します。
-
Tablestore コンソールにログインします。
-
概要 ページで、インスタンス名をクリックします。
-
インスタンスの詳細 タブの テーブルリスト セクションで、データテーブル名をクリックします。
-
-
基本情報 タブの 詳細機能 モジュールにある 定義済列 セクションで、定義済みの列を追加する をクリックします。
-
定義済みの列を追加する ダイアログボックスで 定義済みの列を追加する をクリックし、事前定義列の名前を入力してデータ型を選択します。
-
事前定義列の命名規則:名前の長さは 1~255 バイトで、使用できる文字は英字、数字、アンダースコア (_) です。名前は英字またはアンダースコア (_) で始める必要があります。
-
データ型として String、Integer、バイナリ、浮動小数点数、または ブーリアン を選択できます。事前定義列をインデックス列として使用する場合は、String、Integer、または バイナリ を選択します。
説明定義済みの列を追加する をクリックすると、複数の列を追加できます。不要な列を削除するには、その横にある
アイコンをクリックします。[事前定義列の追加] ダイアログボックスで、[テーブル名] には
exampletableが表示され、[既存の事前定義列] にはcostが表示されます。[事前定義列] エリアで、列名にnameを入力し、データ型に [STRING] を選択します。 -
-
OK をクリックします。
追加した事前定義列が、事前定義列のリストに表示されます。
リストから事前定義列を削除するには、[事前定義列の削除] 列にある
アイコンをクリックします。
ステップ 2:セカンダリインデックスの作成
セカンダリインデックスを作成し、それを使用してデータクエリを高速化できます。セカンダリインデックスには、グローバルセカンダリインデックスとローカルセカンダリインデックスがあります。ビジネス要件に基づいてセカンダリインデックスを作成できます。
データテーブルの作成時に、セカンダリインデックスを作成することもできます。詳細については、「ステップ 3:データテーブルの作成」をご参照ください。
-
テーブル管理 ページに移動します。
-
Tablestore コンソールにログインします。
-
概要 ページで、インスタンス名をクリックします。
-
インスタンスの詳細 タブの テーブルリスト セクションで、データテーブル名をクリックします。
-
-
インデックス タブで、セカンダリインデックスの作成 をクリックします。
-
インデックスの作成 ダイアログボックスで、セカンダリインデックスを設定します。
-
次の表に各パラメーターを示します。
パラメーター
説明
インデックスタイプ
インデックスのタイプ。この値は常に セカンダリインデックス です。
インスタンス名
インスタンスの名前。このパラメーターの値は変更できません。
テーブル名
セカンダリインデックスを作成するデータテーブルの名前。このパラメーターの値は変更できません。
インデックス名
作成するセカンダリインデックスの名前。
重要名前は、既存のデータテーブルおよび時系列テーブルの名前と同じにすることはできません。
インデックスタイプ
セカンダリインデックスのタイプ。有効な値:
-
グローバルセカンダリインデックス:Tablestore は、データテーブルのインデックス列とプライマリキー列のデータを、インデックステーブルの列に非同期で自動的に同期します。
インデックステーブルの最初のプライマリキー列は、データテーブルのプライマリキー列または事前定義列にすることができます。
-
ローカルセカンダリインデックス:Tablestore は、データテーブルのインデックス列とプライマリキー列のデータを、インデックステーブルの列に同期モードで自動的に同期します。データがデータテーブルに書き込まれた後、すぐにインデックステーブルでデータをクエリできます。
インデックステーブルの最初のプライマリキー列は、データテーブルの最初のプライマリキー列である必要があります。
既存データ
データテーブルの既存データをセカンダリインデックスに含めるかどうかを指定します。有効な値:
-
既存データを含める
-
既存データを除外する
-
-
プライマリキー列を希望する順序で選択し、各列の プライマリキー列の追加 をクリックします。
データ型が String、Integer、バイナリ の事前定義列のみをプライマリキー列として使用できます。
-
属性列として使用する事前定義列を選択し、預定義列の追加 をクリックします。
-
-
OK をクリックします。
作成したセカンダリインデックスがインデックスのリストに表示されます。
ステップ 3:データのクエリ
インデックステーブルに対し、単一行クエリまたは範囲クエリを実行して、必要なデータを取得できます。
範囲クエリの実行
-
テーブル管理 ページに移動します。
-
Tablestore コンソールにログインします。
-
概要 ページで、インスタンス名をクリックします。
-
インスタンスの詳細 タブの テーブルリスト セクションで、データテーブル名をクリックします。
-
-
インデックス タブで、対象のインデックステーブルを見つけ、アクション 列の クエリ をクリックします。
-
検索 ダイアログボックスで、クエリ条件を設定します。
-
モード を 範囲検索 に設定します。
-
デフォルトでは、すべての列が返されます。特定の属性列を返すには、[すべての列を取得] をオフにし、列名をコンマ (,) で区切って入力します。
-
[開始プライマリキー列] と [終了プライマリキー列] のパラメーターを設定します。
重要-
[モード] パラメーターを [範囲検索] に設定した場合、右側のプライマリキー列で指定された開始値と終了値の範囲は、左端の各プライマリキー列内で開始値と終了値が同じである場合にのみ有効になります。左端のプライマリキー列で開始値と終了値が異なる場合、右側のプライマリキー列で指定された開始値と終了値の範囲は有効になりません。
-
範囲クエリでサポートされる範囲は、左閉右開区間です。
-
-
Max Versions パラメーターのデフォルト値を保持します。
-
クエリ結果のソート方向を 前方検索 または 後方検索 に設定します。
-
-
OK をクリックします。
クエリ条件を満たすデータがデータリストに表示されます。
単一行クエリの実行
-
テーブル管理 ページに移動します。
-
Tablestore コンソールにログインします。
-
概要 ページで、インスタンス名をクリックします。
-
インスタンスの詳細 タブの テーブルリスト セクションで、データテーブル名をクリックします。
-
-
インデックス タブで、対象のインデックステーブルを見つけ、アクション 列の クエリ をクリックします。
-
検索 ダイアログボックスで、クエリ条件を設定します。
ダイアログボックスで、プライマリキーのサンプル値を入力します: [name] に
lily、[userid] にa100001、[orderid] にa100001000001を入力します。-
モード を 行検索 に設定します。
-
デフォルトでは、すべての列が返されます。特定の属性列を返すには、[すべての列を取得] をオフにし、列名をコンマ (,) で区切って入力します。
-
対象行の プライマリキー値 を入力します。
プライマリキー値の完全性と正確性がクエリ結果に影響します。
-
Max Versions パラメーターのデフォルト値を保持します。
-
-
OK をクリックします。
クエリ対象の行がインデックステーブルに含まれている場合、Tablestore はその行のデータを返します。含まれていない場合、データは返されません。
よくある質問
関連ドキュメント
-
Tablestore SDK または Tablestore CLI を使用してセカンダリインデックスを利用できます。詳細については、「Tablestore SDK を使用したグローバルセカンダリインデックスの使用」および「セカンダリインデックス」をご参照ください。
-
より効率的かつ柔軟にデータのクエリを行いたい場合は、検索インデックス機能を使用できます。この機能は、ブールクエリ、全文検索、プレフィックスクエリ、あいまいクエリなど、複数のクエリ方法に対応しています。詳細については、「概要」をご参照ください。