TrajGiST adalah ekstensi indeks GiST (Generalized Search Tree) untuk data trajectory. Buat indeks TrajGiST pada kolom trajectory guna mempercepat kueri spasial dan temporal—termasuk filter berbasis waktu saja, spasial saja, maupun gabungan spasial-temporal.
Cara kerja
TrajGiST meningkatkan GiST standar dalam dua aspek:
Estimasi biaya indeks yang lebih baik: Ketika terdapat beberapa indeks pada suatu tabel, TrajGiST memilih indeks yang paling efisien untuk kueri tertentu dengan memperkirakan overhead indeks secara lebih akurat.
Kompatibilitas ke atas: TrajGiST dapat menggunakan indeks parsial—yaitu indeks yang mencakup dimensi lebih sedikit daripada yang dibutuhkan oleh kueri—untuk menyaring trajectory yang tidak sesuai sebelum komputasi eksak dijalankan. Sebagai contoh, jika hanya tersedia indeks pada sumbu
tdan Anda menjalankan kueri menggunakanST_{2DT}Intersects, indeks tersebut akan terlebih dahulu menyaring trajectory di luar rentang waktu yang ditentukan, meskipun tidak dapat menghasilkan hasil akhir yang eksak secara mandiri.
Buat indeks TrajGiST
CREATE INDEX [index_name] ON table_name USING TRAJGIST(traj_col [operator_family]);| Parameter | Wajib | Deskripsi | Bawaan |
|---|---|---|---|
index_name | Tidak | Nama indeks | Dihasilkan otomatis |
table_name | Ya | Tabel yang berisi kolom trajectory | — |
traj_col | Ya | Nama kolom trajectory | — |
operator_family | Tidak | Operator family yang menentukan sumbu mana saja yang dicakup oleh indeks | trajgist_ops_multi |
Gunakan parameter ganos.trajectory.index_split_config untuk menentukan operator family saat mengonfigurasi perilaku pemisahan indeks.
Indeks ini mempercepat kueri yang menggunakan operator dan fungsi berikut: ST_ndIntersect, ST_ndDWithin, ST_ndContains, dan ST_ndWithin.
Pilih operator family
Setiap operator family menentukan sumbu mana saja yang diindeks dan, dengan demikian, jenis kueri yang mendapatkan manfaat darinya. Pilih operator family yang sesuai dengan dimensi yang digunakan dalam kueri Anda.
| Operator family | Sumbu yang diindeks | Mempercepat kueri pada |
|---|---|---|
trajgist_ops_z | z | Dimensi elevasi saja |
trajgist_ops_t | t | Dimensi waktu saja |
trajgist_ops_2d | x, y | Dimensi spasial (2D) saja |
trajgist_ops_2dt | x, y, t | Dimensi spasial (2D) + waktu |
trajgist_ops_3d | x, y, z | Dimensi spasial (3D) saja |
trajgist_ops_3dt | x, y, z, t | Semua kueri yang didukung oleh lima operator family sebelumnya |
trajgist_ops_multi | Multiple bounding boxes | Semua kueri; waktu pembuatan indeks dan biaya penyimpanan lebih tinggi |
Panduan:
Gunakan
trajgist_ops_2dtatautrajgist_ops_3dtuntuk sebagian besar beban kerja produksi yang menggabungkan filter spasial dan temporal.Gunakan
trajgist_ops_multi(nilai bawaan) ketika pola kueri bervariasi dan Anda ingin satu indeks saja mencakup semua kasus—dengan konsekuensi penggunaan penyimpanan lebih besar dan waktu prosesCREATE INDEXlebih lama.Gunakan operator family berbasis satu sumbu (
trajgist_ops_t,trajgist_ops_z,trajgist_ops_2d) jika kueri Anda secara konsisten hanya melakukan filter pada satu dimensi dan ukuran indeks atau waktu pembuatan menjadi pertimbangan utama.
Contoh:
Indeks hanya pada sumbu t (untuk kueri yang difilter berdasarkan waktu):
CREATE INDEX traj_t_idx ON trips USING TRAJGIST(traj trajgist_ops_t);Indeks pada sumbu x, y, dan t (untuk kueri yang menggabungkan filter spasial dan temporal):
CREATE INDEX traj_2dt_idx ON trips USING TRAJGIST(traj trajgist_ops_2dt);Indeks multi-bounding-box bawaan:
CREATE INDEX traj_idx ON trips USING TRAJGIST(traj);Batasan
TrajGiST hanya mendukung pengindeksan satu kolom trajectory. Indeks komposit yang mencakup beberapa kolom—di mana satu atau lebih kolom bukan bertipe trajectory—tidak didukung.