Indeks spatio-temporal mencakup indeks Z-ORDER dan indeks sekunder S2. Anda dapat menggunakan indeks ini untuk meningkatkan efisiensi kueri spatio-temporal. Artikel ini menjelaskan cara membuat dua jenis indeks tersebut serta memberikan contoh.
Indeks Z-ORDER
Indeks Z-ORDER terdiri dari indeks kunci utama Z-ORDER dan indeks sekunder Z-ORDER.
Perbedaan penggunaan
Tabel berikut menjelaskan perbedaan penggunaan antara indeks kunci utama Z-ORDER dan indeks sekunder Z-ORDER.
Jenis indeks | Membuat beberapa kolom spatio-temporal | Catatan |
Indeks kunci utama Z-ORDER | Anda dapat membuat indeks kunci utama Z-ORDER untuk beberapa kolom spatio-temporal. Namun, kami menyarankan agar Anda membuat indeks kunci utama Z-ORDER hanya untuk satu kolom spatio-temporal dan membuat indeks sekunder Z-ORDER untuk kolom spatio-temporal lainnya. | Anda dapat membuat indeks kunci utama Z-ORDER untuk sebuah kolom hanya saat Anda membuat tabel spatio-temporal. Setelah tabel dibuat, indeks kunci utama Z-ORDER tidak dapat dimodifikasi, ditambahkan, atau dihapus. |
Indeks sekunder Z-ORDER | Anda dapat membuat indeks sekunder Z-ORDER untuk beberapa kolom spatio-temporal. | Anda dapat membuat indeks sekunder Z-ORDER untuk kolom saat Anda membuat tabel spatio-temporal atau setelah tabel dibuat. Indeks sekunder Z-ORDER dapat ditambahkan atau dihapus tetapi tidak dapat dimodifikasi. |
Buat indeks kunci utama Z-ORDER
Jika Anda menggunakan kode spatio-temporal yang dihasilkan oleh fungsi Z-ORDER sebagai bagian dari indeks kunci utama, maka indeks tersebut adalah indeks kunci utama Z-ORDER. Berikut adalah sintaksis untuk membuat indeks kunci utama Z-ORDER:
Gunakan fungsi pengindeksan
Z-ORDERuntuk menghasilkan kode spatio-temporal untuk kolom g.-- Indeks kunci primer hanya berisi kode Z-ORDER. CREATE TABLE point_table(id INT, g GEOMETRY(POINT), name VARCHAR, PRIMARY KEY(Z-ORDER(g))); CREATE TABLE point_table(id INT, lon DOUBLE, lat DOUBLE, name VARCHAR, PRIMARY KEY(Z-ORDER(lon, lat))); -- Indeks kunci primer berisi kombinasi kode Z-ORDER dan ID. CREATE TABLE point_table(id INT, g GEOMETRY(POINT), name VARCHAR, PRIMARY KEY(Z-ORDER(g),id)); CREATE TABLE point_table(id INT, lon DOUBLE, lat DOUBLE, name VARCHAR, PRIMARY KEY(Z-ORDER(lon, lat),id));Gunakan fungsi pengindeksan
Z-ORDERuntuk menghasilkan kode spatio-temporal untuk kolom g dan t.-- Indeks kunci primer hanya berisi kode Z-ORDER. CREATE TABLE point_table(id INT, g GEOMETRY(POINT), name VARCHAR, t LONG, PRIMARY KEY(Z-ORDER(g,t))); CREATE TABLE point_table(id INT, lon DOUBLE, lat DOUBLE, name VARCHAR, t LONG, PRIMARY KEY(Z-ORDER(lon, lat, t))); -- Indeks kunci primer berisi kombinasi kode Z-ORDER dan ID. CREATE TABLE point_table(id INT, g GEOMETRY(POINT), name VARCHAR, t LONG, PRIMARY KEY(Z-ORDER(g,t),id)); CREATE TABLE point_table(id INT, lon DOUBLE, lat DOUBLE, name VARCHAR, t LONG, PRIMARY KEY(Z-ORDER(lon, lat, t),id));
Buat indeks sekunder Z-ORDER
Jika Anda menggunakan kode spatio-temporal yang dihasilkan oleh fungsi Z-ORDER sebagai bagian dari indeks sekunder, maka indeks tersebut adalah indeks sekunder Z-ORDER. Berikut adalah langkah-langkah untuk membuat indeks sekunder Z-ORDER:
Buat tabel dasar untuk menyimpan data spatio-temporal.
CREATE TABLE point_table1(id INT, g GEOMETRY(POINT), name VARCHAR, t LONG, PRIMARY KEY(id)); CREATE TABLE point_table2(id INT, lon DOUBLE, lat DOUBLE, name VARCHAR, t LONG, PRIMARY KEY(id));Atur properti tabel utama. Tetapkan properti MUTABILITY ke
MUTABLE_LATESTdan properti CONSISTENCY kestrong.ALTER TABLE point_table1 SET 'MUTABILITY'='MUTABLE_LATEST', 'CONSISTENCY'='strong'; ALTER TABLE point_table2 SET 'MUTABILITY'='MUTABLE_LATEST', 'CONSISTENCY'='strong';Buat indeks sekunder Z-ORDER.
Gunakan fungsi pengindeksan
Z-ORDERuntuk menghasilkan kode spatio-temporal untuk kolom g.Metode 1: Tanpa redundansi data.
CREATE INDEX idx ON point_table1 (Z-ORDER(g)); CREATE INDEX idx ON point_table2 (Z-ORDER(lon, lat));Metode 2: Gunakan
include(g)untuk redundansi data guna menghindari lookup tabel.CREATE INDEX idx ON point_table1 (Z-ORDER(g)) INCLUDE (g); CREATE INDEX idx ON point_table2 (Z-ORDER(lon, lat)) INCLUDE (lon, lat);
Gunakan fungsi pengindeksan
Z-ORDERuntuk menghasilkan kode spatio-temporal untuk kolom g dan t.Metode 1: Tanpa redundansi data.
CREATE INDEX idx ON point_table1 (Z-ORDER(g,t)); CREATE INDEX idx ON point_table2 (Z-ORDER(lon, lat, t));Metode 2: Gunakan
include(g)untuk redundansi data guna menghindari lookup tabel.CREATE INDEX idx ON point_table1 (Z-ORDER(g,t)) INCLUDE (g); CREATE INDEX idx ON point_table2 (Z-ORDER(lon, lat, t)) INCLUDE (g);
Indeks sekunder S2
Anda dapat membuat indeks sekunder S2 untuk data POLYGON, MULTIPOLYGON, LINESTRING, atau MULTILINESTRING dalam WGS84. Indeks ini digunakan untuk menanyakan jenis data tersebut berdasarkan sel S2 yang dicakup oleh data. Jika kueri melibatkan kondisi pada data POLYGON atau MULTIPOLYGON, indeks sekunder S2 dapat mempercepat kueri.
Data LINESTRING atau MULTILINESTRING hanya didukung di LindormTable versi 2.6.7.5 dan versi lebih baru. Jika Anda tidak dapat memperbarui LindormTable di konsol, hubungi dukungan teknis (ID DingTalk: s0s3eg3).
Buat indeks sekunder S2
Buat tabel dasar untuk menyimpan data POLYGON, MULTIPOLYGON, LINESTRING, atau MULTILINESTRING. Anda dapat mendefinisikan kolom yang menyimpan data tersebut dengan metode berikut:
Gunakan GEOMETRY(POLYGON) untuk mendefinisikan kolom yang menyimpan data POLYGON.
CREATE TABLE test_table1 (id INT, g GEOMETRY(POLYGON), name VARCHAR, t LONG, PRIMARY KEY(id));Gunakan GEOMETRY(MULTIPOLYGON) untuk mendefinisikan kolom yang menyimpan data MULTIPOLYGON.
CREATE TABLE test_table1 (id INT, g GEOMETRY(MULTIPOLYGON), name VARCHAR, t LONG, PRIMARY KEY(id));Gunakan GEOMETRY(LINESTRING) untuk mendefinisikan kolom yang menyimpan data LINESTRING.
CREATE TABLE test_table1 (id INT, g GEOMETRY(LINESTRING), name VARCHAR, t LONG, PRIMARY KEY(id));Gunakan GEOMETRY(MULTILINESTRING) untuk mendefinisikan kolom yang menyimpan data MULTILINESTRING.
CREATE TABLE test_table1 (id INT, g GEOMETRY(MULTILINESTRING), name VARCHAR, t LONG, PRIMARY KEY(id));Atur tipe kolom data ke tipe GEOMETRY generik.
CREATE TABLE test_table1 (id INT, g GEOMETRY, name VARCHAR, t LONG, PRIMARY KEY(id));
Atur properti tabel utama. Tetapkan properti MUTABILITY ke
MUTABLE_LATESTdan properti CONSISTENCY kestrong.ALTER TABLE test_table1 SET 'MUTABILITY'='MUTABLE_LATEST', 'CONSISTENCY'='strong';Gunakan fungsi pengindeksan S2 untuk menghitung sel yang dicakup oleh data di kolom g pada level tertentu. Indeks sekunder S2 hanya dapat dibuat untuk tabel statis yang menyimpan data POLYGON atau MULTIPOLYGON. Secara default, indeks dibuat secara asinkron. Berikut adalah contoh pembuatan indeks sekunder S2:
CREATE INDEX s2_idx ON test_table1 (s2(g, 10));Verifikasi hasil
Jalankan pernyataan
SHOW INDEX FROM test_table1;untuk memeriksa apakah indeks telah dibuat.Bangun indeks.
BUILD INDEX s2_idx ON test_table1;CatatanJalankan pernyataan
BUILD INDEXuntuk menyinkronkan data historis setelah semua data ditulis ke tabel utama. Data yang ditambahkan ke tabel utama setelah pernyataanBUILD INDEXmulai dieksekusi tidak akan disinkronkan ke tabel indeks.