全部产品
Search
文档中心

ApsaraDB for SelectDB:Indeks Bloom Filter NGram

更新时间:Jul 30, 2025

Untuk meningkatkan kinerja kueri LIKE, ApsaraDB for SelectDB mendukung indeks Bloom Filter NGram. Efek dari indeks Bloom Filter NGram serupa dengan efek dari indeks Bloom filter. Topik ini menjelaskan cara membuat dan menggunakan indeks Bloom Filter NGram di ApsaraDB for SelectDB.

Catatan Penggunaan

  • Untuk membuat indeks Bloom Filter NGram untuk sebuah kolom, kolom tersebut harus memenuhi semua kondisi berikut:

    • Tipe kolom adalah STRING atau VARCHAR.

    • Indeks Bloom Filter NGram dan indeks Bloom filter saling eksklusif untuk kolom yang sama. Pastikan tidak ada indeks Bloom filter yang dibuat untuk kolom tempat Anda ingin membuat indeks Bloom Filter NGram.

  • Untuk membuat indeks Bloom Filter NGram valid dalam kueri, kueri tersebut harus memenuhi semua kondisi berikut:

    • Kueri adalah kueri LIKE.

    • Jumlah karakter berturut-turut dalam pola LIKE harus lebih besar dari atau sama dengan nilai parameter gram_size dalam definisi indeks.

      Catatan
      • Jika Anda tidak menentukan parameter gram_size saat membuat indeks, nilai default 2 akan digunakan.

      • Jika Anda menentukan parameter gram_size saat membuat indeks, Anda dapat menjalankan pernyataan SHOW INDEXES FROM <table_name>; untuk menanyakan indeks tabel.

Buat Indeks Bloom Filter NGram

Buat indeks saat Anda membuat tabel

Operasi ini bersifat sinkron. Jika Anda membuat indeks saat membuat tabel, tabel dan indeks akan dibuat secara sinkron.

Sintaksis

CREATE TABLE  [IF NOT EXISTS] [db_name.]<table_name>
(
  <column_definition_list>,
  [<index_definition_list>] 
)
table_properties;

Parameter

Parameter yang digunakan untuk membuat tabel

Parameter

Diperlukan

Deskripsi

db_name

Tidak

Nama database tempat Anda ingin membuat tabel.

table_name

Ya

Nama tabel yang ingin Anda buat.

column_definition_list

Ya

Daftar definisi kolom.

table_properties

Ya

Properti tabel, seperti model data dan pengaturan partisi dan bucketing. Untuk informasi lebih lanjut, lihat Model Data.

index_definition_list

Tidak

Daftar definisi indeks.

index_definition_list

Saat membuat tabel, Anda dapat mendefinisikan beberapa indeks dalam format index_definition[, index_definition][, index_definition]....

Sintaksis index_definition

INDEX <index_name>(<column_name>) <index_type> [PROPERTIES("<key>" = "<value>")] [COMMENT '<comment>']

Parameter index_definition

Penting

Jika Anda tidak menentukan parameter gram_size dan bf_size untuk parameter opsional PROPERTIES, sistem secara otomatis menetapkan dua parameter tersebut ke nilai default berikut: "gram_size"="2" dan "bf_size"="256". Kami merekomendasikan agar Anda menentukan kedua parameter tersebut secara manual berdasarkan kebutuhan bisnis Anda untuk memberikan kinerja optimal dari indeks Bloom Filter NGram. Untuk informasi lebih lanjut tentang cara menentukan kedua parameter tersebut, lihat deskripsi parameter opsional PROPERTIES.

Parameter Wajib

Parameter

Deskripsi

index_name

Nama indeks.

Kami merekomendasikan agar Anda menambahkan awalan idx_ ke nama kolom untuk menghasilkan nama indeks.

Penting

Nama indeks harus unik dalam sebuah tabel.

column_name

Nama kolom tempat indeks dibuat.

Penting

Sebuah kolom hanya dapat memiliki satu indeks Bloom Filter NGram atau indeks Bloom filter.

index_type

Tipe indeks. Tetapkan nilainya menjadi USING NGRAM_BF, yang menentukan bahwa tipe indeks adalah indeks Bloom Filter NGram.

Parameter Opsional
PROPERTIES

Parameter PROPERTIES menentukan apakah blok data dibagi berdasarkan indeks. Nilai parameter PROPERTIES terdiri dari satu atau lebih pasangan kunci-nilai yang dipisahkan oleh koma (,). Setiap pasangan kunci-nilai berada dalam format "<key>" = "<value>".

kunci

nilai

gram_size

Jumlah karakter berturut-turut berdasarkan mana blok data dibagi.

Sebagai contoh, jika parameter ini disetel ke 3, sebuah ngram dapat dibagi menjadi 'an ', 'n n', ' ng', 'ngr', 'gra', and 'ram'.

Catatan
  • Nilai parameter ini bervariasi berdasarkan skenario kueri aktual. Kami merekomendasikan agar Anda menggunakan panjang minimum string dalam pola LIKE, yang tidak kurang dari 2.

  • Jika nilai parameter ini kecil, Anda dapat meningkatkan jumlah byte dari Bloom filter dengan menyesuaikan nilai parameter bf_size. Ini mengoptimalkan kinerja indeks Bloom Filter NGram. Kami merekomendasikan agar Anda menetapkan parameter gram_size menjadi 3 dan parameter bf_size menjadi 1024. Untuk informasi lebih lanjut tentang cara menggunakan profil kueri untuk optimasi kinerja, lihat Profil Kueri.

bf_size

Jumlah byte dari Bloom filter.

Satuan: byte.

Parameter ini menentukan ukuran indeks setiap blok data. Dalam sebagian besar kasus, nilai yang lebih besar menunjukkan kinerja penyaringan yang lebih baik dan probabilitas tabrakan hash yang lebih rendah. Namun, semakin banyak byte menyebabkan lebih banyak sumber daya penyimpanan dan memori yang dikonsumsi oleh indeks. Kami merekomendasikan agar Anda menetapkan parameter ini menjadi 256 untuk pengujian verifikasi dan kinerja optimal.

COMMENT

Parameter

Deskripsi

comment

Deskripsi indeks.

Contoh

CREATE TABLE `test_table` (
  `siteid` int(11) NULL DEFAULT "10" COMMENT "",
  `citycode` smallint(6) NULL COMMENT "",
  `username` varchar(32) NULL DEFAULT "" COMMENT "",
  `review_body` varchar(320) NULL,
  INDEX idx_ngrambf (`review_body`) USING NGRAM_BF 
  PROPERTIES("gram_size"="3", "bf_size"="256") 
  COMMENT 'review_body ngram_bf index'
) ENGINE=OLAP
AGGREGATE KEY(`siteid`, `citycode`, `username`, `review_body`) COMMENT "OLAP"
DISTRIBUTED BY HASH(`siteid`) BUCKETS 10;

Buat indeks untuk tabel yang sudah ada

Operasi ini bersifat asinkron. Anda dapat menjalankan pernyataan SHOW ALTER TABLE COLUMN; untuk menanyakan kemajuan pembuatan indeks.

Sintaksis

ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>) <index_type> [PROPERTIES("<key>" = "<value>")];

Parameter

Parameter-parameter tersebut sama dengan yang digunakan untuk membuat indeks saat Anda membuat tabel.

Contoh

ALTER TABLE test_table ADD INDEX idx_ngrambf2(username) using NGRAM_BF PROPERTIES("gram_size"="2", "bf_size"="512")comment 'username ngram_bf index' 

Kueri semua indeks yang dibuat untuk sebuah tabel

Sintaksis

SHOW INDEXES FROM <table_name>;

Contoh

Kueri semua indeks yang dibuat untuk tabel test_table.

SHOW INDEX FROM test_table;

Hapus indeks Bloom Filter NGram

Operasi ini bersifat asinkron. Untuk informasi lebih lanjut tentang cara menanyakan kemajuan penghapusan indeks, lihat Kueri informasi tentang indeks terbalik.

Penting

Jika Anda menghapus indeks Bloom Filter NGram, kinerja kueri akan menurun. Lanjutkan dengan hati-hati.

Sintaksis

ALTER TABLE <table_name> DROP INDEX <index_name>;

Contoh

Hapus indeks idx_ngrambf dari tabel test_table.

ALTER TABLE test_table DROP INDEX idx_ngrambf;

Kueri kemajuan perubahan indeks

Anda dapat menjalankan pernyataan ALTER untuk memodifikasi indeks Bloom Filter NGram. Operasi ini bersifat asinkron. Anda dapat menjalankan pernyataan berikut untuk menanyakan kemajuan perubahan indeks:

SHOW ALTER TABLE COLUMN;

Pertanyaan Umum

T: Bagaimana cara memeriksa apakah indeks Bloom Filter NGram digunakan dalam kueri?

J: Anda dapat memeriksa apakah indeks Bloom Filter NGram digunakan berdasarkan profil kueri. Untuk informasi lebih lanjut tentang cara menggunakan profil kueri, lihat Profil Kueri.

T: Apa yang harus saya lakukan jika kesalahan berikut dilaporkan saat saya menjalankan pernyataan ALTER untuk membuat indeks Bloom Filter NGram untuk tabel yang sudah ada?

ERROR 1105 (HY000): errCode = 2, detailMessage = NGRAM_BF index for columns (review_body ) already exist.

J: Anda dapat membuat beberapa indeks Bloom Filter NGram untuk sebuah tabel. Namun, indeks-indeks tersebut harus dikonfigurasikan untuk kolom yang berbeda. Jika indeks Bloom Filter NGram atau indeks Bloom filter sudah dibuat untuk sebuah kolom, Anda tidak dapat membuat indeks Bloom Filter NGram lainnya untuk kolom tersebut.