如何定义ClickHouse表的主键?特定业务场景下的主键选择咨询
表主键定义建议:视频小时级统计场景
核心结论
优先选择video_id + time作为主键,不需要加入type和uid。
具体分析
- 主键唯一性的核心逻辑:你的业务是按视频+小时维度汇总
plays,同一video_id在同一个小时维度的time下,只会存在一条有效统计记录(定期插入的是该小时的最新统计数据,不会重复插入同维度的重复数据),video_id + time的组合已经能完全保证主键的唯一性。 - 为什么排除type和uid:这两个字段是视频的属性字段,同一个
video_id对应的type(视频类型)和uid(上传者/归属用户)应该是固定不变的,不属于统计维度的必要组成部分。把它们加入主键只会造成冗余:- 增加索引的存储开销,降低查询效率;
- 若后续出现视频属性变更(比如调整视频类型),会导致主键冲突,反而增加数据维护的复杂度。
额外优化建议
- 给
type和uid单独建立普通索引,方便后续按视频类型或用户维度做筛选统计; - 确保
time字段统一为小时级精度(例如存储为yyyy-MM-dd HH:00:00格式的时间值),避免因时间精度不一致导致主键重复或统计维度错误。
内容的提问来源于stack exchange,提问作者lee3164
相关产品推荐
相关产品推荐

