NGram BloomFilter索引
更新时间:
为了提高LIKE查询的执行速度,云数据库 SelectDB 版增加NGram BloomFilter索引方案。本文详细介绍了如何在云数据库 SelectDB 版中使用该索引优化查询性能以及使用该索引的注意事项。
背景信息
为了提升LIKE的查询性能,云数据库 SelectDB 版增加了NGram BloomFilter索引。
NGram BloomFilter索引管理
创建索引
创建带有NGram BloomFilter索引的表test_table
,示例如下。
CREATE TABLE `example_db.test_table` (
`siteid` int(11) NULL DEFAULT "10" COMMENT "",
`citycode` smallint(6) NULL COMMENT "",
`username` varchar(32) NULL DEFAULT "" COMMENT "",
INDEX idx_ngrambf (`username`) USING NGRAM_BF PROPERTIES("gram_size"="3", "bf_size"="256") COMMENT 'username ngram_bf index'
) ENGINE=OLAP
AGGREGATE KEY(`siteid`, `citycode`, `username`) COMMENT "OLAP"
DISTRIBUTED BY HASH(`siteid`) BUCKETS 10;
-- PROPERTIES("gram_size"="3", "bf_size"="256"),分别表示gram的个数和bloom filter的字节数。
-- gram的个数跟实际查询场景相关,通常设置为大部分查询字符串的长度,bloom filter字节数,可以通过测试得出,通常越大过滤效果越好,可以从256开始进行验证测试看看效果。当然字节数越大也会带来索引存储、内存cost上升。
-- 如果数据基数比较高,字节数可以不用设置过大,如果基数不是很高,可以通过增加字节数来提升过滤效果。
查看索引
查看我们在表example_db.table_name
上建立的NGram BloomFilter索引,语法如下。
SHOW INDEX FROM example_db.test_table;
删除索引
删除指定example_db.test_table
的下索引,语法如下。
ALTER TABLE example_db.test_table DROP INDEX idx_ngrambf;
修改索引
为已有列新增NGram BloomFilter索引,语法如下。
ALTER TABLE example_db.table3 ADD INDEX idx_ngrambf(username) using NGRAM_BF PROPERTIES("gram_size"="2", "bf_size"="512")comment 'username ngram_bf index'
查看索引变更进度
创建、修改、删除索引是异步过程,可通过命令查看任务进度,语法如下。
SHOW ALTER TABLE COLUMN;
注意事项
NGram BloomFilter只支持字符串列。
NGram BloomFilter索引和BloomFilter索引为互斥关系,即同一个列只能设置两者中的一个。
NGram大小和BloomFilter的字节数,可以根据实际情况调优,如果NGram比较小,可以适当增加BloomFilter大小。
查看某个查询是否命中了NGram BloomFilter索引,可以通过查询的Profile信息查看。
反馈
- 本页导读 (1)
文档反馈