ClickHouse 数据跳过索引似乎没有跳过任何行

问题描述 投票:0回答:1

我在 ClickHouse 中有一个简单的表,有 10M 行,定义如下:

CREATE TABLE monitor_data.syslogs
(
    `id` UInt32,
    `time` DateTime,
    `priority` UInt8,
    `message` String,
    INDEX ngrambf_message_index message TYPE ngrambf_v1(5, 65536, 3, 37) GRANULARITY 256
)
ENGINE = MergeTree
PRIMARY KEY (time, id)
ORDER BY (time, id, priority)
SETTINGS index_granularity = 8192

我正在对其运行匹配查询,如下所示:

SELECT message FROM syslogs WHERE match(syslogs.message, 'lxstat');

我的问题是,这似乎根本没有跳过任何数据。这是输出:

集合中有 3900390 行。经过:6.016 秒。处理了 1000 万行, 777.80 MB(166 万行/秒,129.29 MB/秒。)峰值内存使用量:21.30 MiB。

以下是一些示例行:

9996. │ 17069 │ 2024-08-20 08:40:25 │       13 │ lxstatusd: WLAN event: radio wifi0 station count: 5 │
9997. │ 17069 │ 2024-08-20 08:40:25 │       13 │ lxstatusd: WLAN event: radio wifi0 station count: 5 │

看起来索引没有任何效果,我希望它至少会跳过一些行,即使它定义得不好。

有什么想法吗?

谢谢!

sql indexing substring clickhouse bloom-filter
1个回答
0
投票

你的

GRANULARITY
还差得很远。它不是行数,而是颗粒数(已经是 8,192 行)。所以你试图跳过 256*8192 = 2,097,152 行!这将很难跳过。

首先尝试将

GRANULARITY
设置为 1,然后如果您看到可以接受的结果,请尝试将其设置为 2 或 3。粒度越高,索引将很快变得无效。

© www.soinside.com 2019 - 2024. All rights reserved.