TrajGiST は、トラジェクトリデータ向けの GiST (汎用検索ツリー) インデックス拡張です。トラジェクトリ列に TrajGiST インデックスを作成すると、時間のみ、空間のみ、空間と時間を組み合わせたフィルターを含む、空間および時間クエリを高速化できます。
仕組み
TrajGiST は、標準の GiST を次の 2 つの点で改善します:
-
インデックスコストの見積もりの改善:テーブルに複数のインデックスが存在する場合、TrajGiST はインデックスのオーバーヘッドをより正確に見積もることで、指定したクエリに対して最も効率的なインデックスを選択します。
-
上位互換性:TrajGiST は部分インデックス (クエリが要求するディメンションより少ないディメンションをカバーするインデックス) を使用して、正確な計算の実行前に一致しないトラジェクトリをフィルターで除外できます。たとえば、
t軸のみのインデックスが存在し、ST_2DTIntersectsを使用するクエリを実行する場合、インデックスは指定した時間範囲外のトラジェクトリを先にフィルターで除外します (インデックス単体では最終的な正確な結果を生成できない場合でも同様です)。
TrajGiST インデックスの作成
CREATE INDEX [index_name] ON table_name USING TRAJGIST(traj_col [operator_family]);
| パラメーター | 必須 | 説明 | デフォルト |
|---|---|---|---|
index_name |
いいえ | インデックス名 | 自動生成 |
table_name |
はい | トラジェクトリ列を含むテーブル | — |
traj_col |
はい | トラジェクトリ列名 | — |
operator_family |
いいえ | インデックスが対象とする軸を決定するオペレーターファミリー | trajgist_ops_multi |
インデックス分割の動作を設定する際にオペレーターファミリーを指定するには、ganos.trajectory.index_split_config パラメーターを使用します。
このインデックスは、演算子および次の関数を使用するクエリを高速化します:ST_ndIntersect、ST_ndDWithin、ST_ndContains、ST_ndWithin。
オペレーターファミリーの選択
各オペレーターファミリーは、インデックスが対象とする軸、ひいてはその恩恵を受けるクエリを決定します。クエリで使用するディメンションに一致するオペレーターファミリーを選択してください。
| オペレーターファミリー | インデックス対象の軸 | 高速化されるクエリ |
|---|---|---|
trajgist_ops_z |
z |
標高ディメンションのみ |
trajgist_ops_t |
t |
時間ディメンションのみ |
trajgist_ops_2d |
x、y |
空間 (2D) ディメンションのみ |
trajgist_ops_2dt |
x、y、t |
空間 (2D) + 時間ディメンション |
trajgist_ops_3d |
x、y、z |
空間 (3D) ディメンションのみ |
trajgist_ops_3dt |
x、y、z、t |
上記の 5 つのオペレーターファミリーでサポートされるすべてのクエリ |
trajgist_ops_multi |
複数のバウンディングボックス | すべてのクエリ。インデックス作成時間とストレージコストが増加します |
ガイダンス:
-
空間フィルターと時間フィルターを組み合わせる本番ワークロードの大半では、
trajgist_ops_2dtまたはtrajgist_ops_3dtを使用してください。 -
クエリパターンが混在しており、単一のインデックスであらゆるケースをカバーしたい場合は、
trajgist_ops_multi(デフォルト) を使用してください。ただし、ストレージ使用量の増加とCREATE INDEXの実行時間の増加というコストが発生します。 -
クエリが一貫して 1 つのディメンションに対してのみフィルターし、インデックスサイズまたは作成時間が懸念される場合は、単一軸のファミリー (
trajgist_ops_t、trajgist_ops_z、trajgist_ops_2d) を使用してください。
例:
t 軸のみのインデックス (時間でフィルターするクエリ用):
CREATE INDEX traj_t_idx ON trips USING TRAJGIST(traj trajgist_ops_t);
x、y、t 軸のインデックス (空間フィルターと時間フィルターを組み合わせるクエリ向け):
CREATE INDEX traj_2dt_idx ON trips USING TRAJGIST(traj trajgist_ops_2dt);
デフォルトの複数バウンディングボックス インデックス:
CREATE INDEX traj_idx ON trips USING TRAJGIST(traj);
制限事項
TrajGiST は、単一のトラジェクトリ列のインデックス作成のみをサポートします。複数の列にまたがる複合インデックス (1 つ以上の列がトラジェクトリ型ではない場合) はサポートされません。