用途:回答“ORDER BY 键、跳数索引和 projection 是否与查询实际过滤的列匹配”,面向 ClickHouse 查询性能与索引有效性排查。
主要能力:技能内含 checks.sql(10 项检查:跳数索引清单、projection 及其 ORDER BY 键、按查询频率排序的表、粒度选择率差的查询、高频过滤列、主键列及 part/主键内存聚合、跳数索引与列体积对比、绕过主键的查询、分区裁剪效果、各表 WHERE 条件模式)和 reference.md(ORDER BY 设计准则、反模式、跳数索引选择背景)。数据来源为 system.data_skipping_indices、system.projections、system.tables、system.parts 及 system.query_log 中的 ProfileEvents。
使用方式:先建立连接模式、集群与时间窗口,未建立时先运行 altinity-expert-clickhouse-connection。逐条执行语句,不要整个文件执行;语句以分号结尾并带 -- @check <id> <title> 头,结果需保留 id。遵守 -- @requires:缺表、需要 Keeper/ZooKeeper 而服务端没有、版本条件不满足时跳过并记录原因。保留 {cluster} 宏或按连接技能规则改写,其他 {placeholder} 需先替换为真实值。出错时记录 check id 与错误首行后继续;仅对 UNKNOWN_IDENTIFIER 执行 DESCRIBE TABLE system.<table> 并去掉缺失列。severity 列即该行结论,直接沿用不要重评。
判定规则:按查询模式判断对齐情况,ORDER BY 前缀过滤已支持,缺失列考虑跳数索引或 projection;时间范围加实体过滤需确认顺序,时间可能属分区键;高基数列置于首位会破坏粒度跳过。ORDER BY 列应按基数从低到高排列。跳数索引仅在列不在 ORDER BY 前缀且值与物理行序相关时有用。index_to_column_pct 接近或超过 100 表示索引成本与列相当。分区裁剪与主键是不同手段。EXPLAIN indexes=1 中 PrimaryKey 为 true 表示未过滤,Granules: X/Y 才是真实选择率。
输出:头部含连接模式、集群或单节点、版本、时间窗口;findings 表含 check、severity、object、evidence、recommendation;OK 检查一行列出;跳过与失败检查必须列出 id 与原因;最后给出后续技能与立即行动建议。
限制:本资料未提供安装命令、收费价格、支持平台或效果数据,暂未提供。