All Products
Search
Document Center

Lindorm:CREATE INDEX

Last Updated:Sep 17, 2026

CREATE INDEX membuat indeks pada satu atau beberapa kolom tabel lebar LindormTable untuk mengaktifkan pencarian berdasarkan kunci non-primary-key, pencarian teks penuh, dan kueri analitik tanpa melakukan pemindaian seluruh tabel.

Cakupan

CREATE INDEX hanya berlaku untuk LindormTable. Tidak ada versi minimum yang diperlukan untuk secondary index.

Penting

Untuk membuat search index atau columnstore index menggunakan CREATE INDEX, gunakan Lindorm SQL V2.6.1 atau yang lebih baru. Untuk memeriksa versi Lindorm SQL Anda, lihat panduan versi SQL.

Sebelum memulai

Pembuatan indeks untuk secondary index, columnstore index, dan search index memerlukan lookup data, yang menghasilkan operasi baca. Jika Anda telah mengaktifkan pemisahan data panas dan dingin untuk instans Anda, pantau Pembatasan kecepatan baca penyimpanan kapasitas pada cold storage. Pembacaan yang dibatasi pada cold storage memperlambat pembuatan indeks dan dapat menyebabkan tekanan balik pada operasi tulis.

Sintaks

CREATE INDEX [IF NOT EXISTS] [index_identifier]
  [USING {KV | SEARCH | COLUMNAR}]
  ON table_identifier '(' index_key_expression ')'
  [INCLUDE '(' column_identifier (, column_identifier)* ')']
  [PARTITION BY partition_definition]
  [{ASYNC | SYNC}]
  [WITH '(' index_options ')']

Sub-produksi:

index_key_expression  ::= index_key_definition (, index_key_definition)*
                        | wildcard_string_literal

index_key_definition  ::= column_identifier [DESC]
                        | column_identifier '(' option_definition (, option_definition)* ')'
                        | function_expression

function_expression   ::= Z-ORDER '(' column_identifier (, column_identifier)* ')'
                        | S2 '(' column_identifier, level ')'
                        | CAST '(' column_identifier AS type ')'
                        | MD5 '(' column_identifier ')'
                        | SHA256 '(' column_identifier ')'

partition_definition  ::= {RANGE TIME} '(' column_identifier ')' [PARTITIONS number_literal]
                        | HASH '(' column_identifier (, column_identifier)* ')' [PARTITIONS number_literal]
                        | ENUMERABLE '(' column_identifier (, column_identifier)* ')'

index_options         ::= option_definition (, option_definition)*
option_definition     ::= option_identifier = string_literal

Perbedaan

Elemen sintaks yang didukung bervariasi tergantung jenis indeks.

Elemen sintaks

Secondary index

Search index

Tipe indeks (index_method_definition)

✔

0

Ekspresi kunci indeks (index_key_expression)

✔

0

Kolom yang disertakan (include_expression)

0

✖

Partisi indeks (partition_definition)

✖

0

Mode pembuatan indeks (ASYNC|SYNC)

Penting

Hanya LindormTable 2.6.3 dan yang lebih baru yang mendukung mode pembuatan SYNC.

0

0

Properti indeks (index_options)

0

0

Elemen sintaks

Secondary index

Search index

USING keyword

Opsi (KV adalah nilai default)

Opsional

Ekspresi kunci indeks

Wajib

Wajib

INCLUDE

Opsional

Tidak didukung

PARTITION BY

Tidak didukung

Opsi

ASYNC / SYNC

Opsional

Opsional

WITH properti indeks

Opsional

Opsi

Catatan penggunaan

Anda dapat membuat maksimal 3 secondary index dan 1 search index per tabel lebar.

Tipe indeks (USING)

Gunakan kata kunci USING untuk menentukan tipe indeks. Jika dihilangkan, secondary index (KV) akan dibuat secara default.

USING value

Index type

Use when

KV (atau dihilangkan)

Secondary index

Pencarian kesetaraan dan rentang berdasarkan kolom non-primary-key. Sebuah instans mendukung paling banyak 8 tugas pembuatan secondary index secara bersamaan; permintaan kesembilan akan langsung gagal.

SEARCH

Search index

Pencarian teks penuh, kueri fuzzy, pemfilteran multi-dimensi, agregasi, serta pengurutan dengan pagination. Tidak ada batasan jumlah tugas pembuatan yang dapat dijalankan secara bersamaan. Fitur indeks pencarian harus diaktifkan terlebih dahulu — node pencarian dan node Lindorm Tunnel Service (LTS) dikenai biaya. Lihat Aktifkan indeks pencarian. Kunci indeks harus mencakup setidaknya satu kolom non-primary-key. Tipe data yang didukung: semua tipe dasar kecuali DATE, TIME, dan DECIMAL. Lihat Tipe data dasar.

Ekspresi kunci indeks (index_key_expression)

Tentukan satu atau beberapa kolom sebagai kunci indeks. Indeks dengan beberapa kunci indeks disebut indeks komposit.

Definisi kunci indeks (index_key_definition)

Untuk secondary index, setiap definisi kunci dapat berupa:

  • Nama kolom, opsional dengan DESC untuk urutan menurun

  • Ekspresi fungsi (Z-ORDER, S2, CAST, MD5, atau SHA256)

Untuk indeks pencarian, setiap definisi kunci dapat berupa:

  • Nama kolom dengan properti kunci indeks opsional

  • Konstanta wildcard * untuk mengindeks semua kolom yang ada

Properti kunci search index (option_definition)

Tentukan properti per kolom menggunakan sintaks column(property=value, ...). Contoh: c3(type=text, analyzer=ik). Anda juga dapat menentukan properti ini saat menambahkan kolom indeks menggunakan pernyataan ALTER INDEX.

Properti

Tipe

Deskripsi

indexed

STRING

Menentukan apakah akan membuat indeks untuk kolom ini. Indeks terbalik dibuat untuk kolom string; indeks numerik BKD-Tree untuk kolom numerik. Nilai valid: true (default) atau false

rowStored

STRING

Menentukan apakah akan menyimpan nilai mentah kolom. Nilai valid: true atau false (default)

columnStored

STRING

Menentukan apakah akan menggunakan penyimpanan kolom untuk mempercepat pengurutan dan analisis. Nilai valid: true (default) atau false

type

STRING

Atur ke text untuk bidang teks penuh yang ditokenisasi. Harus digunakan bersama analyzer

analyzer

STRING

Tokenizer untuk kolom type=text. Nilai valid: standard, english, ik, whitespace, comma. Harus digunakan bersama type

mapping

STRING

Properti kunci indeks kustom dalam bentuk string JSON, kompatibel dengan sintaks pemetaan Elasticsearch. Hanya berlaku untuk versi yang kompatibel dengan Elasticsearch. Menggantikan semua properti lain untuk kunci ini

Ekspresi fungsi secondary index (function_expression)

Saat membuat secondary index, Anda dapat menentukan ekspresi fungsi sebagai kunci indeks.

Penting

Ekspresi fungsi MD5 dan SHA256 memerlukan LindormTable 2.6.7.5 atau yang lebih baru. Jika Anda tidak dapat melakukan upgrade, hubungi dukungan teknis Lindorm di DingTalk di s0s3eg3.

Fungsi

Sintaks

Gunakan saat

Z-ORDER

Z-ORDER(col1, col2, ...)

Indeks sekunder spatio-temporal; kolom harus bertipe data spatio-temporal. Lihat Indeks spatio-temporal

S2

S2(col, level)

Indeks grid S2 untuk kolom POLYGON atau MULTIPOLYGON; level berkisar antara 1 hingga 30. Lihat Fungsi indeks S2

CAST

CAST(col AS type)

Indeks pada hasil konversi tipe data. Lihat Tipe data dasar

MD5

MD5(col)

Indeks pada nilai VARCHAR yang dikodekan MD5. Memerlukan LindormTable 2.6.7.5+. Lihat Fungsi MD5

SHA256

SHA256(col)

Indeks pada nilai VARCHAR yang dikodekan SHA256. Memerlukan LindormTable 2.6.7.5+. Lihat Fungsi SHA256

Konstanta wildcard (wildcard_string_literal)

Hanya search index yang mendukung konstanta wildcard *. Gunakan * untuk membuat indeks pada semua kolom yang ada saat pernyataan dijalankan.

CREATE INDEX IF NOT EXISTS idx5 USING SEARCH ON test(*);
Penting
  • Kolom yang ditambahkan setelah pernyataan dijalankan tidak diindeks secara otomatis. Tambahkan secara manual menggunakan ALTER INDEX.

  • Kolom dinamis tidak disertakan. Lihat Kolom dinamis.

Kolom yang disertakan (INCLUDE)

Klausa INCLUDE menambahkan kolom non-kunci dari tabel utama ke tabel indeks, membentuk indeks cakupan. Kueri yang mengenai indeks dapat mengambil nilai kolom yang disertakan tanpa melakukan lookup ke tabel utama, sehingga meningkatkan performa baca.

Untuk secondary index, gunakan kata kunci WITH untuk menyertakan kolom dinamis dengan mengatur INDEX_COVERED_TYPE. Lihat Secondary index.

Partisi indeks (PARTITION BY)

Hanya search index yang mendukung partisi indeks. Server membagi dan menyimpan data secara otomatis. Saat kueri dijalankan, sistem menerapkan pemangkasan partisi untuk melewati partisi yang tidak relevan.

Jenis partisi yang didukung: RANGE dan HASH. Lihat Indeks terpartisi.

Mode pembuatan indeks (ASYNC | SYNC)

Tentukan ASYNC atau SYNC untuk mengontrol kapan pernyataan mengembalikan respons.

Mode

Perilaku

Blok pernyataan?

Indeks dapat digunakan segera setelah pernyataan mengembalikan respons?

Gunakan saat

ASYNC (default mulai LindormTable 2.6.1)

Mengembalikan respons segera setelah tugas pembuatan dimulai

Tidak

Tidak — pembuatan berlanjut di latar belakang

Produksi; proses tulis tetap berjalan tanpa terganggu selama indeks dibuat

SYNC

Mengembalikan respons hanya setelah tugas pembuatan selesai

Ya

Ya

Skrip migrasi skema; pengujian; kasus di mana indeks harus siap sebelum langkah berikutnya

Penting

SYNC memerlukan LindormTable 2.6.3 atau yang lebih baru.

Tabel berikut menunjukkan mode yang didukung oleh masing-masing tipe indeks.duasecondary index dan search indexdua

Building mode

Secondary index

Search index

ASYNC (default mulai LindormTable 2.6.1)

Didukung

Didukung

SYNC (memerlukan LindormTable 2.6.3+)

Didukung

Didukung

Mode pembuatan indeks

Secondary index

Search index

ASYNC

Penting

Mulai dari LindormTable 2.6.1, mode pembuatan indeks default untuk pernyataan CREATE INDEX adalah asinkron.

0

0

SYNC

Penting

Hanya LindormTable 2.6.3 dan yang lebih baru yang mendukung pembuatan indeks sinkron.

0

✔

Properti indeks (WITH)

Properti secondary index

Properti

Tipe

Deskripsi

COMPRESSION

STRING

Algoritma kompresi untuk tabel indeks. Nilai valid: SNAPPY, ZSTD, LZ4

INDEX_COVERED_TYPE

STRING

Metode redundansi untuk kolom yang disertakan. COVERED_ALL_COLUMNS_IN_SCHEMA: menyertakan semua kolom pradefinisi non-primary-key. COVERED_DYNAMIC_COLUMNS: menyertakan semua kolom pradefinisi non-primary-key dan kolom dinamis. Saat diatur, abaikan klausa INCLUDE. Sebelum menyertakan kolom dinamis, aktifkan fitur kolom dinamis terlebih dahulu. Lihat Kolom dinamis

STARTKEY

STRING

Kunci awal untuk tabel indeks. Tidak dapat diatur untuk kolom bertipe timestamp atau data spasial

ENDKEY

STRING

Kunci akhir untuk tabel indeks. Tidak dapat diatur untuk kolom bertipe timestamp atau data spasial

NUMREGIONS

INTEGER

Jumlah pre-partisi untuk tabel indeks. Tidak dapat diatur untuk kolom bertipe timestamp atau data spasial

Properti search index

Properti

Tipe

Deskripsi

indexState

STRING

Status awal indeks. Nilai valid: ACTIVE (tersedia), INACTIVE (tidak tersedia), DISABLED (dinonaktifkan)

numShards

INTEGER

Jumlah shard. Default: dua kali jumlah node pencarian. Pertahankan setiap shard antara 30 juta–100 juta baris dan 30–50 GB. Shard yang melebihi 2 miliar baris memengaruhi stabilitas sistem. Rencanakan jumlah shard sebelum membuat indeks produksi. Untuk data time-series dengan pertumbuhan volume signifikan (seperti pesanan atau log), gunakan indeks terpartisi waktu sebagai gantinya

RANGE_TIME_PARTITION_START

INTEGER

Jumlah hari sebelum pembuatan indeks untuk mulai membuat partisi, untuk data historis. Jika data historis memiliki timestamp lebih awal dari waktu mulai partisi, terjadi error. Wajib diatur saat membuat indeks terpartisi waktu

RANGE_TIME_PARTITION_INTERVAL

INTEGER

Interval dalam hari antara partisi baru. Misalnya, 7 membuat partisi baru setiap minggu. Wajib diatur saat membuat indeks terpartisi waktu

RANGE_TIME_PARTITION_TTL

INTEGER

Periode retensi data dalam hari. Misalnya, 180 menyimpan data enam bulan dan secara otomatis menghapus partisi yang lebih lama. Jika tidak diatur, data tidak pernah dihapus. Wajib diatur saat membuat indeks terpartisi waktu

RANGE_TIME_PARTITION_MAX_OVERLAP

INTEGER

Offset maksimum timestamp masa depan yang diizinkan dalam hari. Default: 1 hari

RANGE_TIME_PARTITION_FIELD_TIMEUNIT

LONG

Unit bidang partisi waktu. Default: milidetik (ms). Jika unitnya detik (s), nilai bidang harus 10 digit. Jika unitnya milidetik (ms), harus 13 digit

RANGE_TIME_PARTITION_CHS

INTEGER

Batas data panas/dingin dalam detik. Misalnya, 864000 mengarsipkan data yang lebih dari 10 hari ke cold storage. Jika tidak diatur, pemisahan data panas dan dingin tidak diaktifkan untuk indeks ini

INDEX_SETTINGS

STRING

Properti indeks kustom dalam bentuk string JSON, kompatibel dengan sintaks pengaturan indeks Elasticsearch. Hanya berlaku untuk versi yang kompatibel dengan Elasticsearch

SOURCE_SETTINGS

STRING

Kebijakan penyimpanan data mentah untuk kolom indeks, dalam bentuk string JSON yang kompatibel dengan pengaturan _source Elasticsearch. Secara default, search index tidak menyimpan data mentah kolom. Konfigurasikan parameter ini hanya jika Anda perlu melakukan kueri data langsung melalui UI visualisasi mesin pencari. Lihat kueri data. Parameter yang didukung: enabled (Boolean; true menyimpan semua kolom, false tidak menyimpan apa pun; tidak dapat digunakan bersama includes atau excludes), includes (array string; kolom yang datanya disimpan; mendukung wildcard *), excludes (array string; kolom yang datanya dikecualikan; mendukung wildcard *)

Contoh

Semua contoh menggunakan tabel utama berikut:

CREATE TABLE test (
  p1 VARCHAR NOT NULL,
  p2 INTEGER NOT NULL,
  c1 BIGINT,
  c2 DOUBLE,
  c3 VARCHAR,
  c4 TIMESTAMP,
  c5 GEOMETRY(POINT),
  PRIMARY KEY(p1, p2)
) WITH (CONSISTENCY = 'strong', MUTABILITY='MUTABLE_LATEST');

Indeks Sekunder

Buat indeks secara asinkron

Mode default adalah ASYNC. Pernyataan mengembalikan respons segera.

CREATE INDEX idx1 ON test(c1 DESC) INCLUDE(c3, c4) WITH (COMPRESSION='ZSTD');

Verifikasi hasil:

SHOW INDEX FROM test;

Buat indeks komposit secara sinkron

CREATE INDEX idx1 ON test(c1, c2, c3) INCLUDE(c4) SYNC WITH (COMPRESSION='ZSTD');

Verifikasi hasil:

SHOW INDEX FROM test;

Buat secondary index spatio-temporal

CREATE INDEX idx ON roads (Z-ORDER(g1));
CREATE INDEX idt ON roads (Z-ORDER(g1, t));

Lihat Indeks spatio-temporal.

Sertakan semua kolom pradefinisi

CREATE INDEX idx1 ON test(c4 DESC) WITH (INDEX_COVERED_TYPE='COVERED_ALL_COLUMNS_IN_SCHEMA');

Verifikasi hasil:

SHOW INDEX FROM test;

Sertakan semua kolom dinamis

CREATE INDEX idx1 ON test(c4 DESC) WITH (INDEX_COVERED_TYPE='COVERED_DYNAMIC_COLUMNS');

Verifikasi hasil:

SHOW INDEX FROM test;

Atur pre-partisi untuk tabel indeks

Buat indeks dengan 32 pre-partisi.

CREATE INDEX idx1 ON test(c4 DESC) INCLUDE(c5, c6) WITH (NUMREGIONS='32');

Verifikasi hasil:

SHOW INDEX FROM test;

Atur kunci awal dan akhir dengan pre-partisi

Buat tabel indeks dengan 32 pre-partisi antara 11111111 dan 9999999.

CREATE INDEX idx1 ON test(c3 DESC) INCLUDE(c5, c6)
WITH (NUMREGIONS='32', STARTKEY='11111111', ENDKEY='9999999');

Verifikasi hasil:

SHOW INDEX FROM test;

Buat secondary index Z-ORDER

CREATE INDEX idx1 ON test(Z-ORDER(c5));

Verifikasi hasil:

SHOW INDEX FROM test;

Buat secondary index grid S2

Indeks S2 hanya mendukung pembuatan asinkron. Jalankan BUILD INDEX untuk memicu pembuatan setelah indeks dibuat.

CREATE INDEX idx1 ON test(S2(c5, 10));
BUILD INDEX s2_idx ON test;

Verifikasi hasil:

SHOW INDEX FROM test;

Indeks kolom setelah konversi tipe data

Konversi kolom c3 ke INTEGER, lalu buat secondary index pada hasilnya.

CREATE INDEX idx1 ON test(CAST(c3 AS INTEGER));

Verifikasi hasil:

SHOW INDEX FROM test;

Indeks Pencarian

Buat search index secara asinkron

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(p1, p2, c1, c2, c3);

Verifikasi hasil:

SHOW INDEX FROM test;
Untuk memantau progres pembuatan, lihat Lihat progres pembuatan penuh search index.

Indeks semua kolom

Jika tidak ada properti kolom yang ditentukan, nilai default akan diterapkan.

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test('*');
Untuk memantau progres pembuatan, lihat Lihat progres pembuatan penuh search index.

Tambahkan properti kunci indeks

Indeks semua kolom dan konfigurasikan kolom c3 untuk tokenisasi IK:

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test('*', c3(type=text, analyzer=ik, indexed=true));

Untuk menggunakan pemetaan kustom kompatibel Elasticsearch untuk kolom c3:

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test('*', c3(mapping='{
  "type": "text",
  "analyzer": "ik_max_word"
}'));
Penting

Parameter mapping hanya berlaku untuk versi kompatibel Elasticsearch dan menggantikan semua properti lain untuk kolom tersebut.

Untuk memantau progres pembuatan, lihat Lihat progres pembuatan penuh search index.

Atur status indeks dan jumlah shard

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(c1, c3(type=text, analyzer=ik))
WITH (indexState=ACTIVE, numShards=4);
Untuk memantau progres pembuatan, lihat Lihat progres pembuatan penuh search index.

Atur pengaturan indeks kustom

Buat search index dengan kompresi ZSTD dan interval refresh 10 detik:

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(c1, c3(type=text, analyzer=ik))
WITH (indexState=ACTIVE, INDEX_SETTINGS='{
  "index": {
    "codec": "zstd",
    "refresh_interval": "10s"
  }
}');
Untuk memantau progres pembuatan, lihat Lihat progres pembuatan penuh search index.

Buat search index terpartisi waktu

Partisi berdasarkan kolom c4, dimulai dari 30 hari lalu, dengan partisi baru setiap 7 hari dan periode retensi 90 hari.

CREATE INDEX IF NOT EXISTS idx2 USING SEARCH ON test(c1, c2, c3, c4)
PARTITION BY RANGE TIME(c4) PARTITIONS 16
WITH (
  indexState=ACTIVE,
  RANGE_TIME_PARTITION_START='30',
  RANGE_TIME_PARTITION_INTERVAL='7',
  RANGE_TIME_PARTITION_TTL='90',
  RANGE_TIME_PARTITION_MAX_OVERLAP='90'
);
Untuk memantau progres build, lihat Lihat progres build penuh indeks pencarian.

Simpan data mentah di search index

Secara default, search index memfilter data tetapi tidak menyimpan nilai mentah kolom. Aktifkan penyimpanan data mentah untuk melakukan kueri langsung melalui mesin pencari.

Simpan semua kolom indeks:

CREATE INDEX idx2 USING SEARCH ON test(c1, c2, c3, c4)
WITH (SOURCE_SETTINGS='{
  "enabled": true
}');

Verifikasi hasil:

SHOW INDEX FROM test;

Simpan subset kolom (c2, c3, c4, kecuali c1):

CREATE INDEX idx2 USING SEARCH ON test(c1, c2, c3, c4)
WITH (SOURCE_SETTINGS='{
  "includes": ["c*"],
  "excludes": ["c1"]
}');

Verifikasi hasil:

SHOW INDEX FROM test;
Untuk memantau progres pembuatan, lihat Lihat progres pembuatan penuh search index.