Untuk meningkatkan kinerja kueri spatio-temporal, pastikan kondisi kueri sesuai dengan indeks spatio-temporal yang telah ditentukan sehingga Lindorm tidak perlu memindai seluruh data dalam tabel. Topik ini menjelaskan cara mengoptimalkan kinerja kueri spatio-temporal.
Optimalkan kueri yang hanya berisi kondisi spasio-temporal
Jika kondisi kueri hanya mencakup rentang spasial atau kombinasi rentang spasial dan waktu, Anda dapat menggunakan fungsi pengindeksan Z-ORDER untuk menghasilkan kode spatio-temporal pada kolom spasial atau kolom waktu dalam salah satu format berikut: Z-ORDER(geometry) atau Z-ORDER(geometry,time). Perhatikan hal-hal berikut saat menggunakan fungsi Z-ORDER dalam kueri:
Parameter input yang Anda tentukan untuk fungsi
Z-ORDERmemengaruhi kinerja kueri. Indeks spatio-temporal hanya dapat digunakan jika kondisi kueri mencakup semua kolom yang ditentukan sebagai parameter input dari fungsiZ-ORDER.Jika Anda menggunakan fungsi
Z-ORDERuntuk menghasilkan kode spatio-temporal pada kolom spasial dan waktu, indeks spatio-temporal hanya dapat digunakan jika batas atas dan bawah rentang waktu ditentukan dalam kondisi kueri.
Tabel berikut menjelaskan bagaimana kinerja kueri dipengaruhi oleh parameter input yang berbeda untuk fungsi pengindeksan Z-ORDER. Dalam pernyataan sampel yang tercantum dalam tabel, kolom g adalah kolom spasial dan kolom t adalah kolom waktu.
Kondisi | Pernyataan |
|
|
Hanya rentang spasial yang ditentukan. |
| Fungsi pengindeksan | Fungsi pengindeksan |
Rentang spasial dan waktu keduanya ditentukan. |
| Fungsi pengindeksan | Fungsi pengindeksan |
| Fungsi pengindeksan | Fungsi pengindeksan |
Optimalkan kueri yang berisi kondisi spasio-temporal dan lainnya
Jika kondisi kueri berisi kondisi spasio-temporal dan lainnya, kami sarankan Anda membuat indeks komposit untuk mempercepat kueri. Indeks komposit adalah indeks kunci utama atau indeks sekunder di mana fungsi Z-ORDER dan kolom lainnya disertakan, seperti PRIMARY KEY(Z-ORDER(g,t), id). Fungsi Z-ORDER disertakan dalam indeks komposit sebagai kolom karena fungsi Z-ORDER mengembalikan kolom kode spatio-temporal yang sesuai dengan nilai-nilai dalam kolom tertentu. Untuk informasi lebih lanjut tentang indeks komposit di LindormTable, lihat Optimalkan kueri berdasarkan indeks sekunder.
Optimalkan kueri paralel
Jika Anda mengaktifkan kueri paralel, Anda dapat menggunakan sharding untuk meningkatkan paralelisme kueri dan kinerjanya.
Sharding adalah metode untuk membagi data menjadi shard. Anda dapat menerapkan sharding saat membuat indeks spatio-temporal untuk mendistribusikan data ke lebih banyak shard. Sharding juga dapat digunakan untuk menulis data yang berdekatan secara spasial atau temporal ke wilayah berbeda dalam tabel indeks, sehingga data disimpan di shard yang berbeda dalam penyimpanan database.
Anda dapat menggunakan fungsi pengindeksan Z-ORDER dalam format berikut untuk membuat indeks spatio-temporal pada kolom yang menyimpan titik dan menentukan jumlah shard: Z-ORDER(Point, numShards). Parameter numShards menentukan jumlah baris data yang ditulis ke wilayah berbeda dalam tabel indeks. Serangkaian awalan yang berkisar dari 0 hingga numShards-1 secara terpisah ditambahkan ke baris data sebelum ditulis.
Contoh berikut membandingkan kinerja kueri sebelum dan sesudah penerapan sharding saat membuat indeks spatio-temporal.
Kinerja Kueri Sebelum Menggunakan Sharding
Buat tabel spatio-temporal bernama table_noshard untuk tabel sampel yang menyimpan sekitar 150 juta baris data titik tanpa menentukan numShards.
CREATE TABLE table_noshard(id INT, g GEOMETRY(POINT), name VARCHAR, PRIMARY KEY(Z-ORDER(g)));Aktifkan kueri paralel untuk table_noshard.
SELECT /*+_l_enable_parallel_(8)*/ id FROM table_noshard WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);Hasilnya menunjukkan bahwa 2.058.894 baris data dikembalikan dalam 10.986 ms.
Kinerja Kueri Setelah Menggunakan Sharding
Buat tabel spatio-temporal bernama table_shard8 untuk tabel sampel yang sama dan atur numShards menjadi 8.
CREATE TABLE table_shard8(id INT, g GEOMETRY(POINT), name VARCHAR, PRIMARY KEY(Z-ORDER(g, 8)));Aktifkan kueri paralel untuk table_shard8.
SELECT /*+_l_enable_parallel_(8)*/ id FROM table_shard8 WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);Hasilnya menunjukkan bahwa 2.058.894 baris data dikembalikan dalam 2.501 ms.
Hasilnya menunjukkan bahwa kinerja kueri paralel meningkat signifikan setelah mengonfigurasi numShards.
Optimalkan kueri di mana rentang tidak beraturan ditentukan
Setelah membuat indeks spatio-temporal, jika bentuk rentang kueri sangat berbeda dari kotak pembatas persegi panjang yang ditentukan oleh rentang penyaringan indeks, indeks tersebut hampir tidak dapat meningkatkan kinerja kueri. Gambar berikut menunjukkan contohnya. 
Saat melakukan kueri pada sejumlah besar data, Anda dapat menentukan petunjuk /*+_l_enable_enhanced_filter_*/ untuk mengaktifkan penyaringan indeks yang ditingkatkan.
Sebagai contoh, Anda dapat mengeksekusi pernyataan berikut untuk mengaktifkan penyaringan indeks yang ditingkatkan pada tabel bernama gtest. Dalam contoh ini, indeks spatio-temporal dibuat untuk kolom g, dan POLYGON((...)) menentukan rentang dengan bentuk tidak beraturan.
SELECT /*+_l_enable_enhanced_filter_*/ id FROM gtest WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);Penyaringan indeks yang ditingkatkan tidak diperlukan saat mengkueri sejumlah kecil data, sehingga dinonaktifkan secara default.