数据库
审查 ClickHouse 表结构、查询与写入配置时,按…
在评审 ClickHouse 的 CREATE/ALTER TABLE、SELECT/JOIN 查询或数据写入策略时,按优先级逐条核对官方最佳实践规则并给出带规则引用的修改建议。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
审查 ClickHouse 表结构、查询特定
解决思路
- 回答 ClickHouse 问题前按优先级顺序处理:先检查 rules/ 目录中是否有适用规则;有则应用并在回复中用「Per `rule-name`...」引用;无则使用 LLM 的 ClickHouse 知识或搜索文档;不确定时用网络搜索获取最新最佳实践;始终注明来源(规则名、通用 ClickHouse 指导或 URL)。
- Agent 会话按固定顺序执行:连接(通过 MCP 或 CLI,见 agent-connect-mcp)→ 发现(数据库 → 表 → 列及注释 → 排序键 → 跳数索引 → 采样 → EXPLAIN)→ 规划(利用排序键和跳数索引知识编写高效 WHERE 子句)→ 执行(带 LIMIT 和超时的查询)→ 恢复(超时或内存错误时收窄过滤条件重试,见 agent-query-safety)。
- 表结构评审时按顺序阅读规则文件:schema-pk-plan-before-creation、schema-pk-cardinality-order、schema-pk-prioritize-filters、schema-types-native-types、schema-types-minimize-bitwidth、schema-types-lowcardinality、schema-types-avoid-nullable、schema-partition-low-cardinality、schema-partition-lifecycle。
- 表结构评审检查项:PRIMARY KEY / ORDER BY 列顺序(基数从低到高);数据类型匹配实际数据范围;LowCardinality 应用于合适的字符串列;分区键基数有界(100-1,000 个值);若使用 ReplacingMergeTree 需有版本列。
- 查询评审时阅读规则文件:query-join-choose-algorithm、query-join-filter-before、query-join-use-any、query-index-skipping-indices、schema-pk-filter-on-orderby。
- 查询评审检查项:过滤条件使用 ORDER BY 前缀列;JOIN 前先过滤各表(而非连接后过滤);根据表大小选择正确的 JOIN 算法;对非 ORDER BY 过滤列使用跳数索引。
- 写入策略评审时阅读规则文件:insert-batch-size、insert-mutation-avoid-update、insert-mutation-avoid-delete、insert-async-small-batches、insert-optimize-avoid-final。
- 写入策略评审检查项:每次 INSERT 批量 10K-100K 行;频繁变更不使用 ALTER TABLE UPDATE;更新模式使用 ReplacingMergeTree 或 CollapsingMergeTree;高频小批量启用异步插入。
- 按指定格式输出:先列「## Rules Checked」(每条规则标注 Compliant / Violation found),再列「## Findings」(分 Violations 与 Compliant,Violation 需给出 Current / Required / Fix),最后列「## Recommendations」(按优先级排序并引用规则)。
- 按优先级应用规则类别:1 主键选择(schema-pk-,4 条,CRITICAL);2 数据类型选择(schema-types-,5 条,CRITICAL);3 JOIN 优化(query-join-,5 条,CRITICAL);4 插入批处理(insert-batch-,1 条,CRITICAL);5 避免 Mutation(insert-mutation-,2 条,CRITICAL);6 分区策略(schema-partition-,4 条,HIGH);7 跳数索引(query-index-,1 条,HIGH);8 物化视图(query-mv-,2 条,HIGH);9 异步插入(insert-async-,2 条,HIGH);10 避免 OPTIMIZE(insert-optimize-,1 条,HIGH);11 JSON 使用(schema-json-,1 条,MEDIUM);12 Agent 表结构发现(agent-discovery-,1 条,CRITICAL);13 Agent 查询安全(agent-query-,1 条,CRITICAL);14 Agent 连接与格式(agent-connect-,1 条,HIGH)。
- 主键规则:建表前规划 ORDER BY(不可变);列按基数从低到高排序;包含频繁过滤的列;查询过滤必须使用 ORDER BY 前缀。
- 数据类型规则:使用原生类型而非全部用 String;使用能容纳数据的最小数值类型;唯一字符串少于 10K 时用 LowCardinality;有限值集合用 Enum 并做校验;避免 Nullable,改用 DEFAULT。
- 分区规则:分区数保持在 100-1,000;分区用于数据生命周期而非查询;理解分区裁剪的权衡;考虑一开始不分区。
- JSON 规则:动态模式用 JSON,已知字段用类型化列。
- JOIN 规则:根据表大小选择算法;只需一个匹配时用 ANY JOIN;连接前先过滤表;考虑用字典/反规范化替代 JOIN;join_use_nulls=0 以使用默认值。
- 索引规则:对非 ORDER BY 过滤列使用跳数索引。
- 物化视图规则:实时聚合用增量物化视图;复杂 JOIN 用可刷新物化视图。
- 插入规则:每次 INSERT 批量 10K-100K 行;高频小批量用异步插入;追求最佳性能用 Native 格式;用 ReplacingMergeTree 替代 ALTER UPDATE;用轻量级 DELETE 或 DROP PARTITION 替代删除;让后台合并自行工作,避免 OPTIMIZE TABLE ... FINAL。
- Agent 集成规则:查询前必须先发现表结构;查询使用 LIMIT、超时和渐进式探索;通过 MCP + CLI 建立连接、发现凭据并选择输出格式。
- 若系统将 ClickHouse 任务分派给专门子代理:表结构发现 + 查询执行可用任意模型(步骤是流程性的);EXPLAIN 分析 + 查询优化建议用中等推理能力模型;按全部 28 条规则做表结构设计评审建议用中等推理能力模型。
- 需要快速核对多条规则而不逐个读文件时,使用完整汇编文档 AGENTS.md。
适用边界 · 注意事项
- 不适用于非 ClickHouse 的数据库评审(如 PostgreSQL、MySQL),其列式存储、稀疏索引、MergeTree 机制等特定行为不同。
- 不适用于没有 rules/ 目录或 AGENTS.md 文件的环境,此时应改用 LLM 知识或搜索官方文档。
- 不适用于纯理论讨论或与 ClickHouse 表结构、查询、写入、Agent 连接无关的问题。