如何解决为什么将tokenbf_v2索引添加到我的Clickhouse表没有任何作用
我在Clickhouse中有一张大桌子,上面有一列叫做“ Route”,这是一个用逗号分隔的id字符串。看起来例如像这样:123421,25245,346263
。一个字符串中可以有数百个ID。
查询该表以选择经过特定ID的,顺序重要的Route,例如:
SELECT * FROM MY_TABLE WHERE Route LIKE '%123421%346263%'
由于查询可能非常慢,因此我尝试通过在Route列上添加数据跳过索引来加快查询速度。根据Clickhouse文档,tokenbf_v2索引似乎是出于我的目的而创建的,因为据我了解,它应该将我的Route列分解为令牌,并应有助于加快LIKE查询。
但是,当我使用以下方式添加索引时:
alter table MY_TABLE add INDEX route_index (Route) TYPE tokenbf_v1(256,5,0) GRANULARITY 1;
,并确保它是通过运行创建的
OPTIMIZE TABLE MY_TABLE FINAL;
根本没有提速。
当我在Clickhouse客户端中分析查询的踪迹时,它始终显示:
Index `route_index` has dropped 0 granules.
很显然,我的Bloomfilter tokenbf索引无效。有人不这样做吗?
顺便说一下,我的Route列的类型为String
,表MY_TABLE
的粒度为128。
解决方法
要保证将索引应用于所有数据,需要重新插入所有数据。我建议创建带有所需索引的测试表并部分填充它。用作游乐场寻找更多最佳指标。
考虑使用 hasToken 功能或其他允许使用 tokenbf_v1 -index的功能(请参见Skipping index: functions support):
SELECT *
FROM (
SELECT *
FROM MY_TABLE
WHERE hasToken(Route,'123421') AND hasToken(Route,'346263'))
WHERE Route LIKE '%123421,346263%'
,
喜欢实际上可以工作
https://github.com/ClickHouse/ClickHouse/issues/15835#issuecomment-706711503
select Count(*) from MY_TABLE where Route like '%,3119550599,%'
Index `route_index` has dropped 781655 / 782032 granules.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。