怎么用 AI 写 SQL 查询?
AI 写的 SQL 语法通常没问题,问题在语义:连表连错了、聚合算重了、时间范围差了几天。跑出来有结果,但数字是错的——这比报错危险得多。
这件事该用哪些工具
具体怎么做:四步
把建表语句给它,不要只给字段名
数据类型、主键、索引、以及字段的注释,决定了 JOIN 和类型转换怎么写。只给字段名,它会猜,猜错就跑出脏数据。
先让它用一句话复述你的需求
「你要的是每个用户最近一次成功支付的金额合计,时间按支付时间算」——如果它复述错了,SQL 一定错。这一步能挡掉一半问题。
让它给样本数据推演结果
给 3-5 行样例数据,让它手工算出预期结果,再和 SQL 结果对。数字对不上,说明逻辑有洞。
生产前看执行计划
AI 写的 SQL 经常全表扫。让它解释执行计划,指出可能的性能问题,特别是在大表上。
可以直接复制的提示词
把花括号里的内容换成你自己的情况,整段粘进对话框即可。提示词里的要求越具体,输出越能用。
从需求生成 SQL
帮我写一个 SQL 查询。
数据库:{MySQL 8 / PostgreSQL 15 / ...}
表结构:
{粘贴完整的 CREATE TABLE 语句,包含索引}
我的需求(用业务语言描述):
{例:找出过去 30 天内下单超过 3 次、但从未退款的用户,按累计金额倒序}
请按这个顺序输出:
1. 先用一句话复述你理解的查询需求(如果我描述有歧义,指出歧义点)
2. 给出 SQL,要求格式化、字段带表别名
3. 逐段解释这个查询在做什么,特别是 JOIN 和聚合部分
4. 给 5 行样例数据,手工推演出这个 SQL 应该返回什么结果
5. 指出潜在问题:null 值处理、重复计数、时区、边界日期
6. 给出性能建议:需要哪些索引、有没有全表扫
不要省略,不要用「此处省略」代替代码。优化慢查询
这个查询跑得很慢,请帮我优化。
数据库:{类型 + 版本}
表数据量:{主表 X 万行,关联表 Y 万行}
当前耗时:{秒}
当前 SQL:
{粘贴}
执行计划:
{粘贴 EXPLAIN 的结果}
请给出:
1. 慢在哪一步(从执行计划里指出具体节点)
2. 三个优化方向,按预期收益排序:改 SQL 写法、加索引、改表结构
3. 每个方向给出具体改法(完整 SQL 或 CREATE INDEX 语句)
4. 说明每个改法的副作用(增加写入成本、占用空间、可能影响其他查询)
5. 改完怎么验证确实变快了
如果执行计划信息不足,告诉我需要看哪些字段。最容易踩的三个坑
只给字段名不给表结构
它不知道字段类型和关系,JOIN 条件可能连错表,日期字段可能当成字符串比较。
相信「有结果」就是对的
SQL 最容易出错的地方是聚合时重复计数:一对多 JOIN 后 SUM,金额会被放大数倍。必须用样本数据核对。
不给数据量让它优化
1000 行和 1 亿行的优化方式完全不同。不给数据量,它给的索引建议可能是错的。
常见问题
AI 写的 SQL 能直接上生产吗?
不建议。至少做三件事:在测试库跑一遍、用已知答案的数据核对结果、看执行计划。涉及金额和统计口径的查询,还要让业务方确认逻辑。
怎么让它写窗口函数?
直接说清楚「用窗口函数,不要用子查询」,并说明分组维度。它默认会用子查询,因为通用性更好但性能更差。
不同数据库方言差别大吗?
大。日期函数、字符串拼接、分页写法、NULL 排序都不同。提问时必须写明数据库类型和版本,否则拿到的 SQL 要手工改。
其他实操教程
这套流程是实际跑通的,不是理论推演
工具迭代很快,界面和功能可能已经变了。如果你按这个流程做下来卡在某一步,欢迎告诉我们,会核实后补充。