Clickhouse Best Practices — Clickhouse 最佳实践
v1.0.0审阅ClickHouse模式、查询或配置时必须使用。专门从事ClickHouse数据库优化的专家,涵盖模式设计、查询...
运行时依赖
版本
用于更新模式的ReplacingMergeTree或CollapsingMergeTree
安装命令
点击复制技能文档
ClickHouse 最佳实践专家 全面指导ClickHouse的使用,涵盖模式设计、查询优化和数据摄取。包含28条规则,分为3个主要类别(模式、查询、插入),按照影响优先级排列。官方文档:ClickHouse 最佳实践
核心职责 模式审查:分析CREATE TABLE和ALTER TABLE语句以实现最佳设计 查询优化:审查SELECT、JOIN和聚合查询以提高性能 插入策略:指导用户批量大小、异步插入和变异避免 故障排除:帮助诊断和解决常见的ClickHouse性能问题
如何应用此技能 优先顺序:检查rules/目录中是否有适用的规则 如果规则存在:应用它们并引用“Per rule-name...” 如果规则不存在:使用一般的ClickHouse知识或搜索文档 如果不确定:使用网络搜索当前的最佳实践 始终引用来源:规则名称、“一般ClickHouse指导”或URL 为什么规则优先:ClickHouse具有特定的行为(列存储、稀疏索引、合并树机制),在这些情况下,一般的数据库直觉可能会产生误导。
审查输出格式 在审查模式、查询或配置时,结构化输出如下:
已检查的规则
rule-name-1- 符合/违反
发现
违反
rule-name:问题描述- 当前:[代码的当前行为]
- 所需:[代码应该的行为]
- 修复:[具体的修复方法]
符合
rule-name:简要说明为什么它是正确的
推荐
[优先级的更改列表,引用规则]审查程序 模式审查(CREATE TABLE、ALTER TABLE) 规则文件:rules/schema-pk-plan-before-creation.md rules/schema-pk-cardinality-order.md rules/schema-pk-prioritize-filters.md rules/schema-types-native-types.md rules/schema-types-minimize-bitwidth.md rules/schema-types-lowcardinality.md rules/schema-types-avoid-nullable.md rules/schema-partition-low-cardinality.md rules/schema-partition-lifecycle.md 检查清单: PRIMARY KEY / ORDER BY 列顺序(低到高基数) 数据类型与实际数据范围匹配 LowCardinality 应用于适当的字符串列 分区键基数有界(100-1,000 个值) ReplacingMergeTree 有版本列(如果使用)
查询审查(SELECT、JOIN、聚合) 规则文件:rules/query-join-choose-algorithm.md rules/query-join-filter-before.md rules/query-join-use-any.md rules/query-index-skipping-indices.md rules/schema-pk-filter-on-orderby.md 检查清单: 过滤器使用ORDER BY前缀列 JOIN之前过滤表 正确的JOIN算法用于表大小 跳过非ORDER BY过滤列的索引
插入策略审查 规则文件:rules/insert-batch-size.md rules/insert-mutation-avoid-update.md rules/insert-mutation-avoid-delete.md rules/insert-async-small-batches.md rules/insert-optimize-avoid-final.md 检查清单: 批量大小10K-100K行每次INSERT 无ALTER TABLE UPDATE用于频繁更改 ReplacingMergeTree或CollapsingMergeTree用于更新模式 异步插入启用用于高频小批量
规则类别按优先级 优先级 类别 影响 前缀 规则数量 1 主键选择 CRITICAL schema-pk- 4 2 数据类型选择 CRITICAL schema-types- 5 3 JOIN优化 CRITICAL query-join- 5 4 插入批量 CRITICAL insert-batch- 1 5 变异避免 CRITICAL insert-mutation- 2 6 分区策略 HIGH schema-partition- 4 7 跳过索引 HIGH query-index- 1 8 物化视图 HIGH query-mv- 2 9 异步插入 HIGH insert-async- 2 10 OPTIMIZE避免 HIGH insert-optimize- 1 11 JSON使用 MEDIUM schema-json- 1
快速参考 模式设计 - 主键(CRITICAL) schema-pk-plan-before-creation - 在表创建之前规划ORDER BY(不可变) schema-pk-cardinality-order - 按低到高基数顺序排列列 schema-pk-prioritize-filters - 包括频繁过滤的列 schema-pk-filter-on-orderby - 查询过滤器必须使用ORDER BY前缀 模式设计 - 数据类型(CRITICAL) schema-types-native-types - 使用本地类型,而不是将所有内容作为String schema-types-minimize-bitwidth - 使用最小的数字类型来适应 schema-types-lowcardinality - 低基数字符串使用LowCardinality schema-types-enum - 有限值集使用Enum并验证 schema-types-avoid-nullable - 避免Nullable;使用DEFAULT代替 模式设计 - 分区(HIGH) schema-partition-low-cardinality - 保持分区计数100-1,000 schema-partition-lifecycle - 使用分区用于数据生命周期,而不是查询 schema-partition-query-tradeoffs - 了解分区剪枝权衡 schema-partition-start-without - 考虑在没有分区的情况下开始 模式设计 - JSON(MEDIUM) schema-json-when-to-use - 动态模式使用JSON;已知列使用类型化列 查询优化 - JOIN(CRITICAL) query-join-choose-algorithm - 根据表大小选择算法 query-join-use-any - ANY JOIN仅当只需要一个匹配时 query-join-filter-before - JOIN之前过滤表