用途:优化 ClickHouse 查询速度与效率,覆盖表结构设计、索引选择、分区策略、投影以及查询写法调优。
主要能力:
- 主键设计:主键定义排序而非唯一性,按低基数到高基数排列列,查询需过滤主键前缀才能命中索引。
- 数据跳过索引:为非主键列添加 minmax(数值范围)、set(低基数分类)、bloom_filter(字符串等值)、ngrambf_v1(子串搜索)等索引。
- 分区:按 toYYYYMM(timestamp) 等分区,便于用 DROP PARTITION 快速删除旧数据,或用 TTL 自动过期。
- 投影:为不同访问模式建立不同排序的投影,并用 MATERIALIZE PROJECTION 物化。
- 查询优化:用 PREWHERE 提前过滤小列,使用 uniq、topK、quantile 等近似函数,只选择需要的列。
- 分析与调试:用 EXPLAIN 查看执行计划,查询 system.query_log 获取耗时、读取行数与字节数。
使用方式:先设计表结构,用 EXPLAIN 对比优化前后;监控 query_log,对读取行数过大的查询告警;注意索引越多写入越慢;用 EXPLAIN 确认优化器是否选用投影。
适用场景:写入快、查询慢的 ClickHouse 表;电商、用户事件、时间序列等分析场景;需要保留策略与多访问模式的表。
限制与要求:需 ClickHouse 21.4+,需了解 SQL 与聚合,需掌握实际查询模式;资料未提供具体性能数字之外的收费、平台等信息。