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 NGramuntuk sebuah kolom, kolom tersebut harus memenuhi semua kondisi berikut:Tipe kolom adalah STRING atau VARCHAR.
Indeks
Bloom Filter NGramdan indeksBloom filtersaling eksklusif untuk kolom yang sama. Pastikan tidak ada indeksBloom filteryang dibuat untuk kolom tempat Anda ingin membuat indeks Bloom Filter NGram.
Untuk membuat indeks
Bloom Filter NGramvalid 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_sizedalam definisi indeks.CatatanJika Anda tidak menentukan parameter
gram_sizesaat membuat indeks, nilai default 2 akan digunakan.Jika Anda menentukan parameter
gram_sizesaat membuat indeks, Anda dapat menjalankan pernyataanSHOW 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
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 Penting Nama indeks harus unik dalam sebuah tabel. |
column_name | Nama kolom tempat indeks dibuat. Penting Sebuah kolom hanya dapat memiliki satu indeks |
index_type | Tipe indeks. Tetapkan nilainya menjadi |
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 Catatan
|
bf_size | Jumlah byte dari 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.
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.