Ketika satu tabel lebar perlu melayani beberapa pola kueri—masing-masing mengakses kombinasi kolom yang berbeda—satu indeks pencarian tidak dapat secara efisien mencakup semua jalur akses. Fitur beberapa indeks pencarian memungkinkan Anda mendefinisikan hingga lima indeks independen pada satu tabel utama, dengan masing-masing mencakup kumpulan kolom yang berbeda. Lindorm secara otomatis mengarahkan setiap kueri ke indeks yang paling sesuai.
Fitur ini sedang dalam pratinjau publik. Untuk mengaktifkannya, hubungi dukungan teknis Lindorm di DingTalk (ID kelompok: s0s3eg3).
Prasyarat
Sebelum memulai, pastikan bahwa:
Mesin LindormTable menggunakan versi 2.8.2.3 atau lebih baru.
Mesin Lindorm LTS menggunakan versi 3.8.12.5 atau lebih baru.
Untuk memeriksa atau melakukan upgrade versi mesin Anda, lihat Peningkatan versi minor.
Batasan
Satu tabel utama mendukung maksimal 5 indeks pencarian.
Semua indeks pencarian pada tabel utama yang sama harus memiliki nama unik dan tidak boleh bentrok dengan jenis indeks lain pada tabel tersebut.
Buat beberapa indeks pencarian
Langkah-langkah berikut menjelaskan cara membuat tabel lebar, membangun beberapa indeks pencarian di atasnya, menulis data, dan melakukan kueri melalui indeks tersebut.
Langkah 1: Buat tabel lebar
create table testTable (pk int, c1 int, c2 varchar, c3 long, primary key(pk));Langkah 2: Buat beberapa indeks pencarian pada tabel
Kolom dan properti indeks dapat tumpang tindih antarindeks.
create index idx1 using search on testTable (c1,c2);
create index idx2 using search on testTable (c3);
create index idx3 using search on testTable (c1,c2,c3);Langkah 3: Tulis data
Lakukan upsert baris ke dalam tabel lebar. Data secara otomatis disinkronkan ke setiap indeks pencarian.
upsert into testTable(pk,c1,c2,c3) values (1,1,'1',1);
upsert into testTable(pk,c1,c2,c3) values (2,2,'2',2);
upsert into testTable(pk,c1,c2,c3) values (3,3,'3',3);
upsert into testTable(pk,c1,c2,c3) values (4,4,'4',4);Langkah 4: Kueri data
Lindorm secara otomatis memilih indeks pencarian yang sesuai berdasarkan kolom dalam kueri. Jika beberapa indeks mencakup kueri yang sama, salah satunya akan dipilih.
Kueri ketiga kolom — idx3 dipilih karena mencakup c1, c2, dan c3:
select * from testTable where c1>0 and c2>'0' and c3>0;Kueri dua kolom — idx1 atau idx3 dipilih, karena keduanya mencakup c1 dan c2:
select * from testTable where c1>0 and c2>'0';Kueri satu kolom — idx2 atau idx3 dipilih, karena keduanya mencakup c3:
select * from testTable where c3>0;Langkah 5: Tentukan indeks secara eksplisit (opsional)
Gunakan sintaks HINT untuk memaksa penggunaan indeks tertentu dalam kueri, mengabaikan pemilihan otomatis:
select /*+ _l_force_index_('idx1') */ * from testTable where c1>0 and c2>'0';Langkah 6: Kelola status indeks
Gunakan ALTER INDEX untuk mengontrol status setiap indeks secara independen:
alter index idx1 on testTable inactive;
alter index idx1 on testTable disabled;Tabel berikut menjelaskan setiap nilai status dan pengaruhnya terhadap kueri serta pengindeksan:
| Status | Dapat dikueri | Data diindeks | Catatan |
|---|---|---|---|
| ACTIVE | Ya | Ya | Status operasional default. |
| INACTIVE | Tidak | Ya | Dijeda untuk kueri, tetapi tetap mengindeks data yang ditulis. |
| DISABLED | Tidak | Tidak | Menghentikan pengindeksan data yang ditulis. Tidak dapat diubah ke status lain — jalankan perintah REBUILD untuk mengaktifkan kembali indeks. |