跳到主内容
SQL数据库代码生成

SQL 查询生成 Prompt:从自然语言到优化 SQL

把「帮我查上个月销售额前十的用户」这种自然语言转成优化 SQL,自动选 JOIN 类型、加索引建议、防 SQL 注入。附 before/after 性能对比。适合 Claude / Cursor / ChatGPT 等 AI 编程工具。

适用:ClaudeCursorChatGPTGLM

用法

把表结构(DDL)和你的需求描述粘进来,AI 会生成带注释的 SQL + 性能建议。

Prompt

你是一个资深 DBA。请根据以下表结构,把我描述的需求转成 SQL 查询。

## 表结构

{{粘贴你的 CREATE TABLE 语句,或表名+字段说明}}

## 需求

{{用自然语言描述你要查什么,比如"查上个月销售额前十的用户"}}

## 要求

1. 生成标准 SQL(MySQL / PostgreSQL,说明你选了哪个方言)
2. 所有字段名用反引号包裹
3. 每个关键步骤加注释说明逻辑
4. 如果需要 JOIN,说明为什么选这种 JOIN 类型
5. 如果查询可能慢,给出索引建议
6. 如果需求有歧义,先列出你的假设,再给 SQL

## 输出格式

### 假设(如果有歧义)
- 假设 1:...
- 假设 2:...

### SQL
```sql
-- 你的 SQL
```

### 索引建议(如果需要)
- `CREATE INDEX idx_xxx ON table(column)` — 理由

### 性能说明
- 预估扫描行数:...
- 是否走索引:...

示例对话

输入: 表结构:orders(id, user_id, amount, created_at, status) 需求:查上个月每个用户的总消费,取前 10 名

输出

假设

  • "上个月"指自然月(非最近 30 天)
  • 只统计已支付订单(status = 'paid')

SQL

SELECT
  user_id,
  SUM(amount) AS total_spent
FROM `orders`
WHERE `status` = 'paid'
  AND `created_at` >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m-01')
  AND `created_at` < DATE_FORMAT(CURDATE(), '%Y-%m-01')
GROUP BY `user_id`
ORDER BY `total_spent` DESC
LIMIT 10;

索引建议

  • CREATE INDEX idx_status_created ON orders(status, created_at) — 覆盖时间范围筛选

性能说明

  • 走 idx_status_created 索引,避免全表扫描
  • GROUP BY user_id 需要临时表排序,数据量大时考虑分页

为什么有效

  • 给表结构(DDL)而不是表名:AI 不知道列名就会编,编出来的 SQL 能跑但查的是错的字段。
  • 要求说明索引影响:绝大多数慢查询不是 SQL 写法问题而是索引没命中,不显式要求,AI 不会主动看执行计划。
  • 要求给边界条件:空结果、NULL 语义、时区——这三类是 SQL 输出与预期不符的高频来源。

进阶(自动化)

生成后先在只读副本上验证执行计划,再上生产:

# 只看计划不执行
pnpm exec prisma db execute --url "$READONLY_URL" \
  --stdin <<< "EXPLAIN ANALYZE <生成的 SQL>"

关注 Seq Scan 是否落在预期索引上;长期方案见 Prompt 缓存 之外更直接的手段——加索引与改查询结构。

反例(AI 默认会写的烂版本)

默认输出SELECT * FROM orders WHERE created_at > '2026-01-01'——没走索引提示、没处理 created_at 为 NULL 的行、也没说时区是 UTC 还是本地。

加了 prompt 之后:明确 created_at 上有 B-tree 索引故可走 range scan;WHERE created_at >= '2026-01-01'::timestamptz AND created_at IS NOT NULL;并提示「若要用本地时区,先确认列类型为 timestamptz」。

延伸阅读

相关对比

Augment Code vs Cursor:企业 AI 编程怎么选?Context Engine vs AI IDE 对比

Augment Code vs Cursor 2026 选型对比:Context Engine 全仓索引的企业 AI 平台 vs SpaceX 收购的 AI IDE 天花板,从形态、Context 覆盖、长任务、价格、合规、中文支持和适合人群 8 个维度判断,帮你选对企业 AI 编程工具。

Cursor vs Aider:GUI IDE 还是 CLI?2026 对比

Cursor vs Aider 2026 选型对比:GUI IDE vs Git 原生 CLI,从 Composer vs Architect 双模型、Tab 补全、多模型 BYOK、价格计费、开源与否和适合人群判断,帮开发者选对。Cursor 是闭源 VS Code fork 月费 $20,Aider 是开源 Apache-2.0 CLI 自带 API key。

Cursor vs Claude Code:什么时候用哪个?(2026 实测选型)

Cursor 和 Claude Code 到底怎么选?一句话结论 + 决策树 + 价格实测 + 国内可用性对比。GUI 派选 Cursor,终端长任务派选 Claude Code,最优解其实是共存。

Cursor vs GitHub Copilot:AI IDE 还是插件?2026 对比

Cursor vs GitHub Copilot 2026 选型对比:AI 原生 IDE vs IDE 插件,从 Composer vs Agent Mode、Tab 补全、多模型、AI Credits 计费、企业版和适合人群判断,帮开发者选对。Cursor 是 VS Code fork 重写交互层,Copilot 是 VS Code 插件继承原生体验。两家都已切 usage 制。

Cursor vs Kiro:「对话式改代码」与「规格驱动开发」怎么选(2026)

Cursor 代表对话式、迭代式的 AI 编码;Kiro 主打 spec-driven,先写需求与设计文档再生成代码。一句话结论 + 决策树 + 价格对比:要速度与手感选 Cursor,要过程可控与可追溯选 Kiro。

Cursor vs Trae:国内开发者怎么选?价格、模型、网络和真实体验对比

Cursor vs Trae 2026 选型对比:从价格、模型能力、国内访问、Builder/Composer、多文件改写、MCP 生态和适合人群判断,帮国内开发者决定继续用 Cursor,还是切到字节 Trae。

相关评测