Pernyataan ALTER INDEX mengubah kolom dalam indeks pencarian atau mengubah status indeks, baik untuk indeks secondary maupun indeks pencarian. Saat mengimpor atau memperbarui data dalam jumlah besar, nonaktifkan indeks dengan ALTER INDEX untuk meningkatkan kinerja.
Sintaksis
alter_index_statement ::= ALTER INDEX [IF EXISTS] index_identifier
ON table_identifier
{
ADD COLUMNS '(' alter_key_expression ')'
|
alter_state_expression
}
[ASYNC]
alter_key_expression ::= index_key_definition [ (',' index_key_definition)* ]
index_key_definition ::= {
column_identifier [ DESC ]
| column_identifier'(' column_options ')'
}
alter_state_expression ::= { ACTIVE | INACTIVE | DISABLED }Jika Anda memodifikasi secondary index, pernyataan
ALTER INDEXhanya mendukung perubahan status indeks.Anda hanya dapat menentukan properti untuk kolom baru saat memodifikasi search index.
Kompatibilitas
LindormTable mendukung dua jenis indeks: secondary index, search index. Tabel berikut menjelaskan kompatibilitas setiap jenis indeks dengan klausa dalam pernyataan ALTER INDEX.
Elemen sintaksis | Secondary index | Search index |
✖️ | 〇 | |
〇 | 〇 |
Penggunaan
Tambah kolom
Anda tidak dapat menambahkan kolom ke secondary index.
Anda dapat menambahkan satu atau beberapa kolom dan menentukan properti kunci indeks untuk kolom baru tersebut. Misalnya, ADD COLUMNS(c1,c3,p1(type=text,analyzer=ik)) menambahkan tiga kolom indeks—c1, c3, dan p1—serta menentukan bahwa kolom p1 menggunakan alat analisis ik. Untuk informasi lebih lanjut tentang properti kunci indeks yang tersedia, lihat Properti kunci indeks pencarian (option_definition).
alter_state_expression
Anda dapat mengatur status indeks ke salah satu kondisi berikut:
Parameter | Deskripsi |
ACTIVE | Indeks tersedia dan dapat digunakan dalam kueri. |
INACTIVE | Indeks tidak tersedia dan diabaikan oleh Pengoptimal kueri, tetapi tetap menerima pembaruan data dari tabel dasar. |
DISABLED | Indeks dinonaktifkan, diabaikan oleh Pengoptimal kueri, dan tidak lagi menerima pembaruan data dari tabel dasar. Penting Mengubah status secondary index langsung dari |
Contoh
Pernyataan berikut membuat tabel dasar dan indeks yang digunakan dalam contoh:
-- Buat tabel dasar.
CREATE TABLE test (
p1 VARCHAR NOT NULL,
p2 INTEGER NOT NULL,
c1 BIGINT,
c2 DOUBLE,
c3 VARCHAR,
c4 TIMESTAMP,
PRIMARY KEY(p1, p2)
) WITH (CONSISTENCY = 'strong', MUTABILITY='MUTABLE_LATEST');
-- Buat secondary index bernama idx1.
CREATE INDEX idx1 ON test(c1 desc) include(c3,c4) WITH (COMPRESSION='ZSTD');
-- Buat search index bernama idx2.
CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(p1, p2, c2);Nonaktifkan indeks
Nonaktifkan indeks idx1.
ALTER INDEX idx1 ON test DISABLED;Verifikasi hasil
Jalankan pernyataan SHOW INDEX FROM test; untuk melihat hasilnya.
Aktifkan indeks
ALTER INDEX IF EXISTS idx1 ON test ACTIVE;Verifikasi hasil
Jalankan pernyataan SHOW INDEX FROM test; untuk melihat status indeks.
Menambahkan kolom ke indeks pencarian
Tambahkan kolom c1 dan c3 ke search index idx2, serta tentukan properti kunci indeks untuk kolom c3.
ALTER INDEX IF EXISTS idx2 ON test ADD COLUMNS(c1,c3(type=text,analyzer=ik));Data historis tidak disinkronkan secara otomatis ke kolom indeks yang baru ditambahkan. Anda harus membangun ulang indeks agar mencakup data historis tersebut. Untuk informasi selengkapnya, lihat Bangun ulang indeks pencarian.
Verifikasi hasil
Jalankan pernyataan SHOW INDEX FROM test; untuk melihat kolom indeks.
Bangun ulang search index
Aksi ini menyinkronkan semua data dari tabel dasar ke search index.
Pembuatan search index secara sinkron: Pernyataan
ALTER INDEXhanya mengembalikan respons setelah proses pembuatan indeks selesai.ALTER INDEX IF EXISTS idx2 ON test REBUILD;Pembuatan search index secara asinkron: Pernyataan
ALTER INDEXlangsung mengembalikan respons, terlepas dari apakah indeks berhasil dibuat atau tidak.ALTER INDEX IF EXISTS idx2 ON test REBUILD ASYNC;