第87篇:用AI写SQL与优化查询——慢查询治理

2026/10/14 AI

页面转圈转了8秒,老板问:”这么慢?”你不知道慢在哪。

后台”订单列表”刚上线点开一秒就出来。三个月后数据涨到几十万条,同一个页面要转 8 秒。老板皱眉问你,你只能说”我看看”——打开代码看着那段 SQL,你也不知道它慢在哪儿。

这一篇讲两件事:

  1. 不会写 SQL,怎么让 AI 帮你把数据查出来;
  2. 查出来了但很慢,怎么让 AI 帮你找到原因并改快。

(这篇不要求你会写 SQL,只要会描述”我要什么数据”就行。)


一、先花两分钟,搞懂 SQL 是个啥

SQL 不是编程语言,它更像你对数据库说的一句人话,只是要用固定格式。

数据库里的数据就像一张张 Excel 表:一张表 = 一个工作表,一列 = 一列,一行 = 一条记录。那 SQL 就是你在跟这张表说话:

你想干嘛 SQL 里的词 对应 Excel 操作
看某几列 SELECT 选中某几列
从哪张表看 FROM 打开哪个工作表
只看符合条件的 WHERE 筛选
按某列排个序 ORDER BY 排序
只看前 20 条 LIMIT 只看前 20 行
按类别汇总 GROUP BY 数据透视表

看懂这张表,就能看懂 80% 的日常 SQL 了。

SQL就是跟Excel说话


二、让 AI 写 SQL:先喂”三件套”

最关键的一步,90% 的人第一次让 AI 写 SQL 失败,都是跳过了它。

你直接问:”帮我写个查订单的 SQL。” AI 给你一段专业代码——一跑报错:字段不存在。因为它不知道你的表长什么样,只能猜,猜你表叫 orders、字段叫 order_id、amount,而你的可能叫 t_order、order_no、total_fee。

AI 编造字段名,是 SQL 场景第一大坑。

所以在让 AI 写之前,必须先喂它三件套:

件 是什么 怎么拿
① 表结构 建表语句(CREATE TABLE ...) 数据库工具右键表 → “生成建表语句”/”DDL”
② 样例数据 真实的 3 行数据 SELECT * FROM 表名 LIMIT 3,复制结果
③ 字段含义 字段啥意思、有哪些取值 自己写一句,如”status:1待付款 2已付款 3已取消”

第③件最易被忽略,但价值最高:status=2 是”已付款”还是”已发货”只有你知道,不说 AI 只能瞎猜。

喂AI三件套


三、提需求四个字:表、要、筛、排

三件套是”背景资料”,接下来是”你到底想要什么”。描述查询需求记四个字:表、要、筛、排。

字 问自己 举例
表 数据在哪几张表 订单表,还要带用户手机号(用户表)
要 要哪几列 订单号、金额、下单时间、手机号
筛 只要什么条件 已付款、最近 7 天、金额 > 100
排 怎么排、汇不汇总、要几条 按下单时间倒序,只前 50 条

把这四条说清,AI 写出来的 SQL 基本一次就能用。

反面:”帮我查一下最近的订单。”(AI 只能猜)

正面:”查订单表,要订单号、金额、下单时间,关联用户表带出手机号;只要状态已付款(status=2)且最近7天;按下单时间倒序,只前50条。”

是不是发现,你不需要懂 SQL——只需要把话说清楚。


四、慢查询治理:量、看、改、验

SQL 能跑但很慢。治理四步走:量、看、改、验。

慢查询四步法

第一步:量 —— 先拿到数字

没有数字,就没有优化。 动手前先搞清三个数:

  • 这条 SQL 实际跑多久(数据库工具执行都显示耗时)
  • 这张表现在多少行(SELECT COUNT(*) FROM 表名)
  • 用户能忍多久(1 秒内无感,3 秒分水岭,超 5 秒算卡死)

反面:一条 0.3 秒的查询,你花两天优化到 0.1 秒——用户完全没感觉,纯浪费生命。

第二步:看 —— 让 AI 读执行计划

执行计划是数据库自己告诉你”怎么执行的”。怎么拿?在 SQL 前加一个词:EXPLAIN。跑一下出一张表,看不懂没关系——原样复制丢给 AI。 全篇最省力的一招:你不用成数据库专家,只要会复制粘贴。

第三步:改 —— 提速四板斧

AI 的优化建议逃不出这四招:

招 意思 什么时候用
索 加索引 某列常拿来筛选/排序,却没索引
少 少取列、少取行 用了 SELECT *,或没加 LIMIT
批 批量代替循环 for 循环里一条条查库(N+1 问题)
拆 复杂查询拆开 / 提前算好 一条 SQL 关联七八张表还带子查询

优先级:索 > 少 > 批 > 拆。 加索引通常改一行、不动业务代码、见效最快——很多”8 秒变 0.2 秒”就是加了个索引。

关于索引三句话:

  • ① 常用来 WHERE/ORDER BY 的列才值得建;
  • ② 建了不等于用得上,改完再 EXPLAIN 确认;
  • ③ 索引不是越多越好,会让”写入”变慢。

提速四板斧

第四步:验 —— 拿数字说话

改完必须再测一次,和第一步数字对比。8 秒 → 0.3 秒?收工。8 秒 → 7.6 秒?回退换一处。一次只改一处,改完就验——一口气改五处,变快不知哪个起作用,变慢更无从查起。


五、三道闸门:别把生产数据搞没了

这一节最重要。SQL 里最危险的两个词是 DELETE 和 UPDATE,执行完没有后悔药。

经典事故:DELETE FROM 订单表 忘了写 WHERE,整张表清空。所以任何 DELETE/UPDATE 过三道闸:

闸 动作 为什么
一闸:先 SELECT 把 DELETE 换成 SELECT *,同样 WHERE 跑一遍 看影响哪些行,是不是你想的那些
二闸:数一下 SELECT COUNT(*) 看条数 你以为删 1 条显示 8000 条——当场刹车
三闸:先备份 重要操作前复制/导出一份表 出事了还能救

让 AI 写 DELETE/UPDATE 时,明确要求它”先给我 SELECT 版本”。

危险操作三道闸


六、AI 写 SQL 的两个坑

坑一:它会编造不存在的字段。 解法:永远先喂三件套,宁可多贴 20 行建表语句,也别让它猜。

坑二:数据库”方言”不一样。 MySQL、PostgreSQL、SQLite、SQL Server 语法有细微差别,AI 默认按最常见写,跑到你这儿可能报错。解法:提问第一句就说清“我用的是 MySQL 8.0”,一句话省半小时。


七、提示词模板盒子

模板 1:让 AI 写 SQL(万能版)

我用的数据库是【MySQL 8.0 / PostgreSQL 16 / SQLite】。

【表结构】建表语句原样粘贴(几张表贴几张)
【样例数据】每张表贴 3 行真实数据
【字段含义补充】status:1待付款 2已付款 3已取消;total_fee:单位是分不是元

【我要查什么】
- 表:从哪几张表取
- 要:要哪些列
- 筛:筛选条件
- 排:怎么排序 / 要不要分组 / 要多少条

要求:
1. 只用我给的表和字段,不编造字段名
2. 给完整可直接执行的 SQL
3. SQL 下方用一句人话解释它干了什么
4. 需求有歧义先问我,别自己假设

模板 2:慢查询诊断(贴执行计划)

下面这条 SQL 很慢,请诊断。

【数据库】MySQL 8.0
【耗时】实际 8.2 秒
【数据量】订单表约 65 万行,用户表约 3 万行
【SQL 原文】(粘贴)
【表结构】(粘贴 CREATE TABLE,含已有索引)
【执行计划】(粘贴 EXPLAIN 输出,原样复制)

请按格式回答:
1. 慢在哪一步(指出执行计划里的具体问题,用人话)
2. 优化方案按"见效大小"排序,最多 3 条
3. 每条写清:改什么、预计快多少、副作用
4. 建议加索引就给完整建索引语句,并说明会不会拖慢写入
给具体动作,别说"可以考虑优化一下"。

模板 3:危险操作三道闸

我要删除/更新这批数据:(描述意图)
表结构如下:(粘贴)

请按顺序给我三段 SQL:
1. 【试跑版】先用 SELECT * 查出会被影响的行,条件与正式操作完全一致
2. 【计数版】用 COUNT(*) 统计影响多少行
3. 【正式版】真正的 DELETE / UPDATE

要求:
- 正式版必须带 WHERE,绝不允许全表操作
- 正式版前加注释:"执行前确认第2步条数是否符合预期"
- 有不可逆风险明确提醒我先备份

模板 4:读不懂的 SQL 求翻译

下面这条 SQL 是同事写的,我看不懂,请翻译成人话。(粘贴)

请按格式回答:
1. 一句话总结:这条 SQL 在查什么
2. 分步拆解:从最里层开始一层层说
3. 结果长什么样:返回哪些列、大概什么数据
4. 潜在风险:会不会很慢、会不会查出超预期数据
用大白话,术语在括号里解释。

八、一页纸总结

  • SQL 不难,就是”对着 Excel 表说话”:SELECT 选列、WHERE 筛选、ORDER BY 排序、LIMIT 取前几条。
  • 让 AI 写 SQL 前先喂三件套:表结构 + 3 行样例 + 字段含义。不喂它就编字段。
  • 描述需求四字:表、要、筛、排。 说清这四条基本一次对。
  • 治理慢查询四步:量、看、改、验。 先拿数字,再看 EXPLAIN,一次只改一处,改完再量。
  • 提速四板斧:索、少、批、拆。 优先加索引,性价比最高。
  • DELETE/UPDATE 过三道闸:先 SELECT 试跑 → COUNT 数条数 → 备份。没有后悔药。
  • 第一句话告诉 AI 你用什么数据库,省半小时。

下篇预告

这一篇讲了怎么让数据查得又对又快。下一篇讲更要命的:怎么让你的东西别被别人轻易搞坏——注入、XSS、越权,根源一句话:你把用户输入当成了自己人。下一篇《第88篇:用AI做安全排查》给你上线前五分钟自查清单。我们下篇见。

Search

    Post Directory