文档

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信息查看。