ClickHouse 表引擎与排序键分区优化实战
建表示例
CREATE TABLE events (
ts DateTime,
user_id UInt64,
action String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(ts)
ORDER BY (ts, user_id)
SETTINGS index_granularity = 8192;
查询优化
SELECT count() FROM events
WHERE ts >= now() - INTERVAL 7 DAY AND action = 'login';
SELECT user_id, count() FROM events
WHERE ts >= now() - INTERVAL 1 DAY
GROUP BY user_id
ORDER BY count() DESC
LIMIT 20;
维护
- 根据时间维度滚动分区,便于归档与清理
- 合理设置
index_granularity平衡扫描与索引体积
总结
通过时间分区与合适的排序键,可显著提升过滤与聚合效率。

发表评论 取消回复