SQL查询优化编写Skill data-write-query

这个技能用于根据自然语言描述,编写针对特定SQL方言优化的查询,遵循最佳实践。它帮助用户高效进行数据提取和分析,提升数据库查询性能。关键词:SQL查询,数据编写,优化,数据分析,数据库,数据工程,ETL开发。

数据工程 0 次安装 0 次浏览 更新于 3/25/2026

name: data-write-query description: 为您的SQL方言编写优化的SQL,遵循最佳实践

编写SQL查询

如果您看到不熟悉的占位符或需要检查连接了哪些工具,请询问可用的集成。

根据自然语言描述编写SQL查询,针对您的特定SQL方言优化并遵循最佳实践。

用法

您可以请求编写SQL查询(例如,“编写查询以统计订单”或“获取前10名用户”)。

参数

  • description — 描述您需要的数据和业务逻辑

工作流程

1. 理解请求

解析用户的描述以识别:

  • 输出列:结果应包含哪些字段?
  • 筛选条件:哪些条件限制数据(时间范围、细分、状态)?
  • 聚合操作:是否有GROUP BY操作、计数、求和、平均值?
  • 连接:是否需要组合多个表?
  • 排序:结果应如何排序?
  • 限制:是否有前N个或抽样要求?

2. 确定SQL方言

如果用户的SQL方言未知,询问他们使用哪种:

  • PostgreSQL(包括Aurora、RDS、Supabase、Neon)
  • Snowflake
  • BigQuery(Google Cloud)
  • Redshift(Amazon)
  • Databricks SQL
  • MySQL(包括Aurora MySQL、PlanetScale)
  • SQL Server(Microsoft)
  • DuckDB
  • SQLite
  • 其他(询问具体细节)

在同一会话中记住方言以备将来查询。

3. 发现架构(如果数据仓库已连接)

如果数据仓库已连接:

  1. 基于用户描述搜索相关表
  2. 检查列名、类型和关系
  3. 检查影响性能的分区或聚类键
  4. 查找可能简化查询的预构建视图或物化视图

4. 编写查询

遵循以下最佳实践:

结构:

  • 当查询有多个逻辑步骤时,使用CTE(WITH子句)以提高可读性
  • 每个逻辑转换或数据源对应一个CTE
  • 为CTE命名具有描述性(例如,daily_signupsactive_usersrevenue_by_product

性能:

  • 在生产查询中绝不使用SELECT * — 只指定所需列
  • 尽早筛选(将WHERE子句尽可能靠近基表)
  • 在可用时使用分区筛选器(特别是日期分区)
  • 对于大型结果集的子查询,优先使用EXISTS而非IN
  • 使用适当的JOIN类型(在INNER JOIN正确时不要使用LEFT JOIN)
  • 当JOIN或窗口函数有效时,避免相关子查询
  • 注意爆炸连接(多对多)

可读性:

  • 添加注释解释非明显逻辑的“为什么”
  • 使用一致的缩进和格式化
  • 使用有意义短名称别名表(不只是abc
  • 将每个主要子句放在单独的行上

方言特定优化:

  • 应用方言特定语法和函数
  • 使用方言适当的日期函数、字符串函数和窗口语法
  • 注意任何方言特定的性能特性(例如,Snowflake聚类、BigQuery分区)

5. 呈现查询

提供:

  1. 完整查询,在SQL代码块中带有语法高亮
  2. 简要解释每个CTE或部分的作用
  3. 性能说明(如果相关:预期成本、分区使用、潜在瓶颈)
  4. 修改建议 — 如何调整以适应常见变化(不同时间范围、不同粒度、额外筛选器)

6. 提供执行选项

如果数据仓库已连接,提供运行查询并分析结果的选项。如果用户想自己运行,查询已准备好复制粘贴。

提示

  • 提前提及您的SQL方言以立即获得正确语法
  • 如果您知道表名,包括它们 — 否则我会帮您找到
  • 指定是否需要查询是幂等的(可安全重新运行)或一次性
  • 对于重复查询,提及是否应参数化日期范围