为 SQL 优化附上推理。
粘贴一条语句,得到方言级改写与完整推理——不只是结果。
- PostgreSQL
- 12–18
- MySQL
- 5.7–9.0
- Oracle
- 11g–23ai
- SQL Server
- 2016–2025
以上引擎在免费额度内均可用。
它如何工作
第 1 步
粘贴语句
粘贴一条 SQL,选择它运行的数据库与版本,其余都不用填。
第 2 步
生成方言感知的改写
改写遵循该引擎的语法、版本限制与已知反模式,而不是套用一份通用模板。
第 3 步
逐条复核改动
每处改动都附原因与风险等级,必要时给出索引与统计信息建议。
常见问题
这里说明本工具做哪些优化、又有哪些事刻意留给你判断。
SQL 优化器是做什么的?
SQL 优化器改写查询,让数据库用更少的代价跑完同一件事。SQL Optimizer 读取单条语句,按你所选引擎的语法与版本限制改写,并为每处改动附上原因与风险等级,必要时额外给出索引与统计信息建议。
SQL 优化改变什么,又不改变什么?
它让一条语句对执行它的引擎更便宜:扫描更少的行、更合理的连接顺序、不再去取没人读的列。它改的只是语句本身——你的表结构、索引和数据都不动,相关建议单独列出,便于你对照自己的表判断。可能改变结果集的改动会被标记,而不是静默应用;你的 SQL 不被存储、不被记录、也不用于训练。
怎么优化一条慢查询?
先测量再改写:看带实际行数的执行计划,确认过滤列上的索引是否真的用得上,减少语句要返回的行与列,最后才动 SQL。只看耗时分不出是哪一步出了问题——统计信息过期、或过滤列被函数包住,往往才是真正的原因。
执行计划里真正要看的是哪几个数字?
按顺序看四项:预估行数与实际行数、是扫描还是查找、连接方式与循环次数、排序发生在哪里。两个行数相差数量级时,说明计划建立在错误的统计信息上,其余内容都不必再读。总成本不在其中——它是只在同一份计划内可比的任意单位。
支持哪些数据库?
支持 PostgreSQL 12 至 18、MySQL 5.7 至 9.0、Oracle 11g 至 23ai,以及 SQL Server 2016 至 2025。改写遵循所选引擎的规则,分页、标识符引用、空值判断与字符串拼接都按该方言输出,而不是套用通用模板。
SQL 优化等于加索引吗?
不等于,两者是两个独立的杠杆。索引与统计信息建议回答的是数据库能否快速定位行;改写回答的是这条语句本身是否在做该做的事。SQL Optimizer 两者都会给出,但不会在改写依赖某个索引时默不作声。
在一种数据库里正确的改写,到另一种里会出错吗?
会,而且通常悄悄出错。空字符串在 Oracle 里就是 NULL、在 PostgreSQL 里不是;|| 在前两者是拼接、在 MySQL 默认模式下是逻辑或;未加引号的标识符在 PostgreSQL 折叠为小写、在 Oracle 折叠为大写。改写只对它所针对的引擎与版本成立,所以分页、引号与空值处理都按你所选的方言输出。
SQL Optimizer 会保存我的 SQL 或用于训练吗?
不会。语句只用于生成改写结果,不写入磁盘、不记入日志、也不用于模型训练。表结构与执行计划字段均为可选项,整个工作台的会话录制都做了遮罩处理。
它和执行计划(EXPLAIN)有什么区别?
执行计划告诉你数据库对你给出的语句做了什么;SQL 优化改变的是语句本身。两者互补:把执行计划粘进可选上下文字段,建议会参考它,但改写本身仍从 SQL 出发。
付费之前可以先试用吗?
可以。无需注册即可每天免费优化一次,四类 SQL 方言(PostgreSQL、MySQL、Oracle、SQL Server)都能用,且包含输出安全校验。付费方案把月度额度提高到 1,000 次(Pro)或 3,000 次(Max),不按人头收费。
改写后的 SQL 可以直接在生产环境执行吗?
请把每处改写当作待复核的建议,而不是可直接上线的结果。可能改变结果集的改动会被标记而非静默应用,输入中原本不存在的语句也会在你执行前明确指出。执行前请先核对文档中列出的前提条件与你的实际表结构是否一致。