名称: SQL查询优化器
描述: 分析并优化跨不同数据仓库平台(Snowflake、BigQuery、Redshift、Databricks)的SQL查询,提供平台特定的优化建议。
版本: 1.0.0
类别: SQL优化
技能ID: SK-DEA-004
允许工具: Read, Grep, Glob, Bash, WebFetch
SQL查询优化器
分析并优化跨不同数据仓库平台的SQL查询,提供平台特定的优化建议。
概述
此技能检查SQL查询以识别性能瓶颈、提出优化建议,并为Snowflake、BigQuery、Redshift和Databricks提供平台特定的优化方案。它分析查询执行计划,推荐索引/聚类键,并识别反模式。
能力
- 查询执行计划分析 - 解析和分析EXPLAIN输出
- 索引推荐 - 建议聚类键、排序键、分区键
- 连接优化 - 识别低效的连接模式并提出改进建议
- 子查询消除 - 将相关子查询转换为CTE或连接
- CTE优化 - 物化与引用优化
- 窗口函数优化 - 框架和分区优化
- 谓词下推验证 - 验证过滤器下推的有效性
- 聚类键推荐 - 平台特定的聚类策略
- 物化视图建议 - 识别物化视图的候选对象
- 平台特定优化 - Snowflake、BigQuery、Redshift、Databricks
输入模式
{
"query": {
"type": "string",
"description": "要分析的SQL查询",
"required": true
},
"platform": {
"type": "string",
"enum": ["snowflake", "bigquery", "redshift", "databricks", "postgres"],
"required": true,
"description": "目标数据仓库平台"
},
"tableStatistics": {
"type": "object",
"description": "表统计信息,包括行数、列基数",
"properties": {
"tables": {
"type": "array",
"items": {
"name": "string",
"rowCount": "number",
"sizeGB": "number",
"columns": "array"
}
}
}
},
"executionPlan": {
"type": "object",
"description": "查询执行计划(EXPLAIN输出)"
},
"queryHistory": {
"type": "object",
"description": "历史查询性能指标"
},
"optimizationGoals": {
"type": "array",
"items": {
"type": "string",
"enum": ["latency", "cost", "throughput", "scan_reduction"]
},
"default": ["latency", "cost"]
}
}
输出模式
{
"optimizedQuery": {
"type": "string",
"description": "优化后的SQL查询"
},
"improvements": {
"type": "array",
"items": {
"type": {
"type": "string",
"enum": ["join", "predicate", "aggregation", "cte", "window", "scan", "index"]
},
"description": "string",
"impact": "high|medium|low",
"lineNumber": "number",
"originalCode": "string",
"optimizedCode": "string"
}
},
"indexRecommendations": {
"type": "array",
"items": {
"table": "string",
"type": "clustering|sort|partition|index",
"columns": "array",
"rationale": "string",
"ddl": "string"
}
},
"estimatedImprovement": {
"scanReduction": {
"type": "number",
"description": "数据扫描减少百分比"
},
"timeReduction": {
"type": "number",
"description": "执行时间减少百分比"
},
"costReduction": {
"type": "number",
"description": "查询成本减少百分比"
}
},
"antiPatterns": {
"type": "array",
"items": {
"pattern": "string",
"severity": "high|medium|low",
"location": "string",
"suggestion": "string"
}
},
"platformSpecificNotes": {
"type": "array",
"items": "string"
}
}
使用示例
基础查询优化
{
"query": "SELECT * FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.created_at > '2024-01-01'",
"platform": "snowflake"
}
带执行计划分析
{
"query": "SELECT customer_id, SUM(amount) FROM orders GROUP BY customer_id",
"platform": "bigquery",
"executionPlan": {
"stages": [...],
"totalBytesProcessed": 1073741824
},
"optimizationGoals": ["cost", "scan_reduction"]
}
带表统计信息
{
"query": "SELECT ... 复杂查询 ...",
"platform": "redshift",
"tableStatistics": {
"tables": [
{
"name": "orders",
"rowCount": 10000000,
"sizeGB": 50,
"columns": [
{"name": "order_id", "cardinality": 10000000},
{"name": "customer_id", "cardinality": 500000}
]
}
]
}
}
平台特定优化
Snowflake
| 优化项 |
描述 |
| 聚类键 |
推荐微分区聚类 |
| 结果缓存 |
识别可从缓存中受益的查询 |
| 查询加速 |
建议 QUERY_ACCELERATION_MAX_SCALE_FACTOR |
| 仓库大小调整 |
推荐合适的仓库规模 |
BigQuery
| 优化项 |
描述 |
| 分区 |
DATE/TIMESTAMP 分区推荐 |
| 聚类 |
最多4个聚类列 |
| BI Engine |
识别符合BI Engine条件的查询 |
| 槽位 |
估算槽位使用优化 |
Redshift
| 优化项 |
描述 |
| 排序键 |
COMPOUND 与 INTERLEAVED 推荐 |
| 分布 |
KEY、EVEN、ALL 分布策略 |
| 压缩 |
列编码推荐 |
| 清理 |
VACUUM 和 ANALYZE 推荐 |
Databricks
| 优化项 |
描述 |
| Z排序 |
多列Z顺序推荐 |
| Delta缓存 |
缓存策略推荐 |
| Photon |
识别符合Photon条件的查询模式 |
| 自适应执行 |
AQE配置建议 |
常见反模式检测
查询结构
| 反模式 |
影响 |
修复方法 |
| SELECT * |
高 |
明确指定列 |
| 相关子查询 |
高 |
转换为 JOIN 或 CTE |
| 大数据集上的 DISTINCT |
中 |
使用 GROUP BY 或窗口函数 |
| 非SARGable谓词 |
高 |
重写以使用索引 |
连接问题
| 反模式 |
影响 |
修复方法 |
| 笛卡尔积 |
严重 |
添加连接条件 |
| 隐式连接 |
中 |
使用显式 JOIN 语法 |
| 错误的连接顺序 |
高 |
按选择性重新排序 |
| 连接键上缺少索引 |
高 |
添加聚类/排序键 |
聚合问题
| 反模式 |
影响 |
修复方法 |
| GROUP BY 序号 |
低 |
使用列名 |
| 过滤前聚合 |
高 |
先过滤,后聚合 |
| 过度分组 |
中 |
减少 GROUP BY 列 |
集成点
MCP服务器集成
- Snowflake MCP - 实时执行计划分析
- BigQuery MCP - 成本估算和槽位分析
- Redshift MCP - 查询执行和统计信息
相关技能
- 数据质量分析器 (SK-DEA-005) - 表统计信息收集
- dbt项目分析器 (SK-DEA-003) - 模型查询优化
适用流程
- 查询优化 (
query-optimization.js)
- 数据仓库设置 (
data-warehouse-setup.js)
- BI仪表板开发 (
bi-dashboard.js)
- OBT创建 (
obt-creation.js)
参考资料
版本历史