为什么 Clickhouse 需要如此多的内存来进行简单的查询?

问题描述

我有一个简单的查询,例如:

SELECT w,x,y,z FROM my_table
WHERE microsecs >= 1234 AND microsecs <= 2345 AND a='foo' AND b='bar'
ORDER BY microsecs ASC

我在表上的主键是 (a,b,microsecs)。

查询应该返回大约 2.95 亿行。我正在使用 clickhouse-driver 通过 execute_iter 流式传输数据。

尽管如此,我还是需要将 max_memory_usage 设置为大约 48GB 才能使查询成功。

为什么clickhouse 需要这么多内存来完成一个简单的查询,我该如何减少所需的内存?

解决方法

我在 clickhouse_en 电报频道和I was pointed to optimizing read in-order 上的文档中提出了这个问题。我将 ORDER BY 从 ORDER BY microsecs 更改为 ORDER BY a,b,microsecs,所需内存急剧下降。