问题描述
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
,所需内存急剧下降。