SuperAPI AI 工具集

clickhouse-query-optimization

数据与分析

查看项目

更新于 10-16 02:35

技能介绍

用途:该技能在编写、调试或优化 ClickHouse 查询时加载,目标是让查询更快、减少内存占用、消除全表扫描,并让 JOIN 在毫秒级完成。

主要能力与规则:

  • 关键规则:按 ORDER BY 前缀列过滤;避免 SELECT *,只选需要的列;优化前用 EXPLAIN indexes=1 检查索引使用与行数估计。
  • 高优先级:对筛选性强的条件使用 PREWHERE;对小于 1000 万行的键值查找优先用字典而非 JOIN;仅做存在性判断时用 IN 子查询代替 JOIN。
  • 中等:尽量限制 JOIN 数量;数据按排序有序存储,配合稀疏主索引跳过无关 granule(默认 8192 行)。
  • 索引:对不在 ORDER BY 中的列可加跳过索引,如 bloom_filter、minmax、set(N),用 EXPLAIN indexes=1 验证。
  • 分析与排查:用 EXPLAIN、EXPLAIN PIPELINE、EXPLAIN ESTIMATE 分析;查 system.query_log 找慢查询和全表扫描;用 system.query_thread_log 做线程级剖析。
  • JOIN 优化决策:仅过滤用 IN 子查询;需要列且表小、可容忍延迟用字典(dictGet,LIFETIME 可设过期);需实时或大表用先过滤两侧的 JOIN;每次都用的 JOIN 可考虑写入时反规范化。
  • 其他:查询缓存(22.8+,SET use_query_cache = 1);ALTER TABLE ... UPDATE 走异步 mutation,可查 system.mutations;内存超限时可用 uniqHLL12 近似去重或预聚合。

使用方式:作为技能加载后,在写查询或排障时参照上述规则;改动 schema(加索引、建物化视图、改表)前需先获得用户确认。

限制与注意:字典最终一致,LIFETIME(300) 表示数据可能滞后约 5 分钟,需先确认用户能否接受;mutation 为异步;文档未提供具体收费、价格、平台或效果保证信息。