clickhouse+bitmap中SQL优化经验

1、子查询
SELECT bitmapAndCardinality(groupBitmapOrStateOrDefault(bitmap)) FROM test.group_bitmap WHERE code = '001' AND version = '001'

目的是查出符合条件的bitmap然后计算其容量,但实际执行过程中发现会扫描全表的bitmap,耗时相当高

优化后:
SELECT bitmapAndCardinality(groupBitmapOrStateOrDefault(bitmap)) FROM (
SELECT bitmap FROM test.group_bitmap WHERE code = '001' AND version = '001' LIMIT 1
)
原先40秒的查询变成了3秒,效果显著;

2、PREWHERE
如果是MergeTree引擎,用PREWHERE代替WHERE来查询,PREWHERE首先会读取指定的列数据,来判断数据过滤,等待数据过滤之后再读取SELECT的列字段来补全其余属性。

3、groupArrayDistinct
优化前:
SELECT bitmapBuild(groupArray(offset)) AS bitmap FROM ...

优化后:
SELECT bitmapBuild(groupArrayDistinct(offset)) 性能提高非常显著
如果重复性数据越多效果应该会越好

你可能感兴趣的:(clickhouse+bitmap中SQL优化经验)