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

Tablestore:インデックス選択ポリシー

最終更新日:Dec 28, 2024

Tablestoreは大容量の構造化データを格納でき、さまざまなシナリオでの高速なクエリと分析のためにさまざまな種類のインデックススキーマをサポートしています。SQLクエリ機能を使用する場合、セカンダリインデックステーブルへの明示的なアクセスを使用して、インデックスベースのクエリを実行できます。Tablestoreは、検索インデックスを使用してデータをクエリするための次の方法を提供します。検索インデックスの自動選択と検索インデックスへの明示的なアクセス。

説明

セカンダリインデックスと検索インデックスの詳細については、セカンダリインデックスの概要と検索インデックスの概要を参照してください。

セカンダリインデックステーブルの使用

重要

セカンダリインデックスは、データクエリに対して自動的に選択することはできません。セカンダリインデックステーブルのマッピングテーブルを作成するには、手動でSQLステートメントを記述する必要があります。

Tablestoreは、セカンダリインデックステーブルへの明示的なアクセスのみをサポートしています。セカンダリインデックステーブルへの明示的なアクセスを使用してセカンダリインデックステーブルにアクセスする場合は、次の操作を実行します。

  1. CREATE TABLEステートメントを実行して、アクセスするセカンダリインデックステーブルのマッピングテーブルを作成します。詳細については、テーブルのマッピングテーブルの作成を参照してください。

  2. SELECTステートメントを実行してデータをクエリします。詳細については、データのクエリを参照してください。

検索インデックスの使用

SQLを使用して、主キー以外の列に基づくクエリやブールクエリなどの複雑なクエリを実行する場合、クエリするデータを持つデータテーブルの検索インデックスを作成することをお勧めします。検索インデックスを作成した後、次のいずれかの方法を使用して、SQLで検索インデックスを使用してデータをクエリできます。

検索インデックスの自動選択

重要

クエリするデータを持つデータテーブルのマッピングテーブルを作成するときに、クエリ結果が厳密な整合性モードである必要があることを指定した場合、または集計操作の精度を損なうことによってクエリのパフォーマンスを向上させることができない場合、Tablestoreはデータクエリに対して検索インデックスを自動的に選択しません。

アクセスする検索インデックスが明示的に指定されていない場合、WHERE句のすべてのフィルタリング列とSELECTステートメントの戻り列が検索インデックスに含まれている場合、Tablestoreはデータクエリに対して検索インデックスを自動的に選択します。たとえば、Select A,B,C from exampletable where A=XXX and D = YY;ステートメントでは、A、B、C、およびD列が検索インデックスに含まれている場合、Tablestoreはexampletableテーブルの検索インデックスをデータクエリに対して自動的に選択します。

検索インデックスへの明示的なアクセス

特定の検索インデックスを使用してデータをクエリする場合、次の操作を実行して、検索インデックスへの明示的なアクセス方法を使用できます。

  1. CREATE TABLEステートメントを実行して、検索インデックスのマッピングテーブルを作成します。詳細については、検索インデックスのマッピングテーブルの作成を参照してください。

  2. SELECTステートメントを実行してデータをクエリします。詳細については、データのクエリを参照してください。

GROUP BY句と集計関数を組み合わせたSQLステートメントが検索インデックスのSearch API操作の集計機能と一致する場合、Tablestoreは演算子も識別し、演算子を検索インデックスにプッシュダウンします。演算子のプッシュダウンの詳細については、演算プッシュダウンを参照してください。

付録:検索インデックスの機能とSQL式の対応

検索インデックスは、SQL式と同じ機能を提供します。次の表は、検索インデックスの機能とSQL式の対応を示しています。

SQL式

検索インデックスの機能

述語なし

該当なし

すべて一致クエリ

=

  • a = 1

  • b = "hello world"

用語クエリ

>

a > 1

範囲クエリ

>=

a >= 2

<

a < 5

<=

a <= 10

is null

a is null

存在クエリ

is not null

a is not null

and

a = 1 and b = "hello world"

ブールクエリ

or

a > 1 or b = 2

not

not a = 1

!=

a !=1

like

a like "%s%"

ワイルドカードクエリ

in

a in (1,2,3)

複数用語クエリ

text_match

text_match(a, "tablestore cool")

一致クエリ

text_match_phrase

text_match_phrase(a, "tablestore cool")

フレーズ一致クエリ

array_extract

array_extract(col_long)

ARRAY型とネストされたフィールド型

nested_query

nested_query(`tags.tagName` = 'tag1' AND `tags.score` = 0.2)

order by

nested_query col_long

並べ替えとページングの実行

limit

limit 10

min()

min(col_long)

集計

max()

max(col_long)

sum()

sum(col_long)

avg()

avg(col_long)

count()

count(col_long)

count(distinct)

count(distinct col_long)

any_value()

any_value(col_long)

group by

group by col_long

参照

検索インデックスを使用してSQLクエリを高速化する場合、全文検索検索インデックスのArray型検索インデックスでサポートされているNESTED検索インデックスの仮想列など、検索インデックスに基づく機能を使用できます。