LIKE クエリの性能を向上させるために、ApsaraDB for SelectDB は サポートします NGram Bloom フィルター インデックスをサポートしています。NGram Bloom フィルターインデックスの効果は、Bloom フィルターインデックスの効果と似ています。 このトピックでは、NGram Bloom フィルターN-Gram ブルーム フィルター インデックスを ApsaraDB for SelectDB
使用上の注意
列に
NGram Bloom フィルターインデックスを作成するには、列が次のすべての条件を満たしている必要があります:列の型は STRING または VARCHAR です。
同じ列に対して
NGram Bloom フィルターインデックスとBloom フィルターインデックスは相互に排他的です。NGram Bloom フィルターインデックスを作成する列には、Bloom フィルターインデックスが作成されていないことを確認してください。
クエリで
NGram Bloom フィルターインデックスを有効にするには、クエリが次のすべての条件を満たしている必要があります:クエリは LIKE クエリです。
LIKE パターンの連続する文字数は、インデックス定義の
gram_sizeパラメーターの値以上である必要があります。説明インデックスの作成時に
gram_sizeパラメーターを指定しない場合、デフォルト値 2 が使用されます。インデックスの作成時に
gram_sizeパラメーターを指定した場合、SHOW INDEXES FROM <table_name>;文を実行して、テーブルのインデックスをクエリできます。
NGram Bloom フィルターインデックスの作成
テーブルの作成時にインデックスを作成する
この操作は同期処理です。テーブルの作成時にインデックスを作成すると、テーブルとインデックスは同期的に作成されます。
構文
CREATE TABLE [IF NOT EXISTS] [db_name.]<table_name>
(
<column_definition_list>,
[<index_definition_list>]
)
table_properties;パラメーター
テーブルの作成に使用されるパラメーター
パラメーター | 必須 | 説明 |
db_name | いいえ | テーブルを作成するデータベースの名前。 |
table_name | はい | 作成するテーブルの名前。 |
column_definition_list | はい | 列定義のリスト。 |
table_properties | はい | データモデル、パーティション設定、バケット設定などのテーブルのプロパティ。詳細については、「データモデル」をご参照ください。 |
index_definition_list | いいえ | インデックス定義のリスト。 |
index_definition_list
テーブルを作成するときに、index_definition[, index_definition][, index_definition]... 形式で複数のインデックスを定義できます。
index_definition の構文
INDEX <index_name>(<column_name>) <index_type> [PROPERTIES("<key>" = "<value>")] [COMMENT '<comment>']index_definition のパラメーター
オプションパラメーター PROPERTIES に gram_size パラメーターと bf_size パラメーターを指定しない場合、システムは 2 つのパラメーターを自動的に次のデフォルト値に設定します。"gram_size"="2" および "bf_size"="256"。NGram Bloom フィルター インデックスの最適なパフォーマンスを提供するために、ビジネス要件に基づいて 2 つのパラメーターを手動で指定することをお勧めします。2 つのパラメーターの指定方法の詳細については、オプションパラメーター PROPERTIES の説明を参照してください。
必須パラメーター
パラメーター | 説明 |
index_name | インデックスの名前。 列名に 重要 インデックス名はテーブル内で一意である必要があります。 |
column_name | インデックスが作成される列の名前。 重要 1 つの列には、1 つの |
index_type | インデックスのタイプ。 |
オプションパラメーター
PROPERTIES
PROPERTIES パラメーターは、インデックスに基づいてデータブロックを分割するかどうかを指定します。PROPERTIES パラメーターの値は、コンマ (,) で区切られた 1 つ以上のキーと値のペアで構成されます。各キーと値のペアは、"<key>" = "<value>" の形式です。
キー | 値 |
gram_size | データブロックの分割基準となる連続する文字数。 たとえば、このパラメーターを 説明
|
bf_size |
単位: バイト。 このパラメーターは、各データブロックのインデックスサイズを決定します。ほとんどの場合、値が大きいほどフィルタリングのパフォーマンスが向上し、ハッシュ衝突の可能性が低くなります。ただし、バイト数が多いほど、インデックスによって消費されるストレージリソースとメモリリソースが増加します。検証テストと最適なパフォーマンスを得るには、このパラメーターを 256 に設定することをお勧めします。 |
COMMENT
パラメーター | 説明 |
comment | インデックスの説明。 |
例
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;既存のテーブルにインデックスを作成する
この操作は非同期処理です。SHOW ALTER TABLE COLUMN; 文を実行して、インデックスの作成進捗状況をクエリできます。
構文
ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>) <index_type> [PROPERTIES("<key>" = "<value>")];パラメーター
パラメーターは、テーブルの作成時にインデックスを作成するために使用されるパラメーターと同じです。
例
ALTER TABLE test_table ADD INDEX idx_ngrambf2(username) using NGRAM_BF PROPERTIES("gram_size"="2", "bf_size"="512")comment 'username ngram_bf index' テーブルに作成されたすべてのインデックスをクエリする
構文
SHOW INDEXES FROM <table_name>;例
test_table テーブルに作成されたすべてのインデックスをクエリします。
SHOW INDEX FROM test_table;NGram Bloom フィルターインデックスを削除する
この操作は非同期処理です。インデックスの削除進捗状況をクエリする方法の詳細については、「転置インデックスに関する情報のクエリ」をご参照ください。
NGram Bloom フィルターインデックスを削除すると、クエリのパフォーマンスが低下します。注意して進めてください。
構文
ALTER TABLE <table_name> DROP INDEX <index_name>;例
test_table テーブルから idx_ngrambf インデックスを削除します。
ALTER TABLE test_table DROP INDEX idx_ngrambf;インデックスの変更進捗状況をクエリする
ALTER 文を実行して、NGram Bloom フィルターインデックスを変更できます。この操作は非同期処理です。次の文を実行して、インデックスの変更進捗状況をクエリできます。
SHOW ALTER TABLE COLUMN;よくある質問
Q: クエリで NGram Bloom フィルター インデックスが使用されているかどうかを確認するにはどうすればよいですか?
A: クエリプロファイルに基づいて、NGram Bloom フィルターインデックスが使用されているかどうかを確認できます。クエリプロファイルの使用方法の詳細については、「クエリプロファイル」をご参照ください。
Q: 既存のテーブルに NGram Bloom フィルターインデックスを作成するために ALTER 文を実行したときに、次のエラーが報告された場合はどうすればよいですか?
ERROR 1105 (HY000): errCode = 2, detailMessage = NGRAM_BF index for columns (review_body ) already exist.A: 1 つのテーブルに複数の NGram Bloom フィルター インデックスを作成できます。ただし、これらのインデックスは異なる列に対して構成する必要があります。列に NGram Bloom フィルター インデックスまたは Bloom フィルター インデックスがすでに作成されている場合、その列に別の NGram Bloom フィルターインデックスを作成することはできません。