這個 AI大模型把原本要跑 1000 秒的代碼,優(yōu)化到了 7 秒,是寫 SQL 的最佳搭檔
一條 470 行、跑 1000 秒的“屎山”SQL,被 AI 輪番開刀:Claude 4 和 Gemini 追求極速卻算錯數(shù),DeepSeek 直接報錯,Grok 3 穩(wěn)在 32 秒,而 ChatGPT o3 一把干到 7 秒,還順手揪出臟數(shù)據(jù)。文章用同題實測告訴你:選對模型、喂對提示詞,就能把 AI 變成 7×24 小時在線的高級 DBA,讓優(yōu)化 SQL 從玄學(xué)變科學(xué)。
搞數(shù)據(jù)分析的同學(xué),誰沒被“屎山”SQL代碼折磨過?
在BI里,有一段470行的代碼,確實慢,要跑 1000 多秒,將近17分鐘!
每次查詢量大一點業(yè)務(wù)都會來投訴
最近實在受不了了,就想用AI來優(yōu)化一下,順便看看現(xiàn)在這些當(dāng)紅炸子雞們寫SQL的能力到底怎么樣。
所以如果你平時工作也有寫SQL的需求,那么這篇文章可以幫你省下大把選AI工具的時間。
甚至可以直接拉到文末看結(jié)論。
統(tǒng)一給的提示詞是一樣的:這是我的sql server語句,整體跑下來需要1039秒,太慢了,需要你幫我對它進行優(yōu)化,提高查詢速度,盡可能在100秒內(nèi)完成。給我對當(dāng)前查詢問題的判斷、優(yōu)化的邏輯,以及最終改后的完整sql server代碼即可:
看看各家人表現(xiàn)如何。
Claude 4 ?:速度快,但數(shù)據(jù)錯了
拿到語句,跑了一下嚇到了,確實是快,給我優(yōu)化到不用1秒了,但從行數(shù)看得出來,數(shù)據(jù)錯了。。
數(shù)據(jù)分析中,數(shù)據(jù)錯就是原罪是不可原諒的,所以直接 passGemini ?:效果同 Claude4
Gemini 也翻車了,結(jié)果也是錯的。
DeepSeek ?:國產(chǎn)還是不行
國產(chǎn)之光DeepSeek,這次有點拉胯,直接就掛了,報錯說我的查詢有問題。得,連門都沒進來。
Grok3?:不錯,終于有個靠譜的了
輪到馬斯克的Grok 3。這次總算看到點希望了!
它給出的優(yōu)化代碼,跑下來只要32.5秒,而且最重要的是,返回行數(shù)是945行!跟原始數(shù)據(jù)一模一樣!
從1039秒優(yōu)化到32.5秒,同時保證了數(shù)據(jù)的正確性,這個效果已經(jīng)很不錯了,對于日常工作來說完全夠用。
ChatGPT o3 ?:臥槽,王者誕生!
臥槽,直接給干到7秒了
但不對誒,怎么是947行?
經(jīng)驗告訴我,差距這么小屬于是誤差,應(yīng)該是哪里沒清洗好。
于是我繼續(xù)問GPT差距的原因,它給了幾個語句,讓我去查,優(yōu)先是這里:
果然,我手動把原先的表結(jié)果和GPT的結(jié)果匹配后,得出的結(jié)論,跟它給的這個判斷是一樣的——原表有重復(fù)值。
也就是說,GPT不僅優(yōu)化了我的代碼,還順手把我原始數(shù)據(jù)里的“坑”給找了出來。
它比我自己,更懂我寫的“屎山”!這多出來的2行,不是它算錯了,而是它更“正確”地處理了我的臟數(shù)據(jù)。
結(jié)論
模型特征差異:為什么 o3 表現(xiàn)這么好?
1.推理深度優(yōu)先
o3 屬“推理系列”,回答前會花更多計算在拆解步驟、判斷風(fēng)險;官方就把它定位在復(fù)雜、多步驟、答案不直接可見的問題上,并強調(diào)比前代在真實復(fù)雜任務(wù)上重大錯誤更少。
2.自查 + 工具鏈意識
o3 支持在 ChatGPT 里調(diào)用代碼、文件、等工具,并被設(shè)計成可“自我核對 / 自查”式解題。這類模型更容易輸出驗證 SQL(查行數(shù)、查重復(fù)鍵)而不是只給一版改寫。
我這案例中“差 2 行→讓檢查重復(fù)”的互動就是典型自查路徑。
3.編程任務(wù)基準強
o3 在 SWE-bench 等真實軟件任務(wù)上創(chuàng) SOTA;這說明它在讀長代碼、保持語義一致、逐步修改方面有訓(xùn)練優(yōu)勢,遷移到復(fù)雜 SQL 時表現(xiàn)更穩(wěn)。
4.可調(diào)思考強度,面向可靠場景
o3 / o3-pro 提供更高“思考時間”檔位(reasoning effort),官方推薦在需要高可靠輸出時使用;SQL 優(yōu)化這類“性能+正確性”雙高風(fēng)險任務(wù)特別受益。那 Claude / Gemini 為啥不行?(結(jié)合你測評)Claude
Claude 3.5/后續(xù)家族強調(diào)智能 + 速度(較 Opus 提升 2x),并且在“提供工具時可獨立寫/改/跑代碼”。在缺少你庫結(jié)構(gòu)、驗證要求時,它傾向快速重寫、 aggressively 精簡;結(jié)果是性能上去了,邏輯被改,行數(shù)飄。
也就是說,給 Claude 時要明確“結(jié)果必須與原 SQL 一致”“先給驗證腳本”,否則它可能優(yōu)先交付速度。Gemini
Google 的 Gemini 在線路里重點做“快速幫你寫 SQL / 解釋 SQL / 自動補全”;官方文檔也提醒要在運行前驗證生成的語句。面向“讓更多人寫得出 SQL”,而不是保證復(fù)雜多表、臟數(shù)據(jù)場景下 100% 口徑一致。怎么喂模型,才能又好又快?
其實我提示詞是很簡單的,但如果可以把這些和 SQL 一起貼給模型,翻車率下降:原慢 SQL + 當(dāng)前耗時目標:性能閾值 & 結(jié)果必須一致表結(jié)構(gòu)(主鍵/索引)已知臟數(shù)據(jù)(重復(fù)、NULL)是否允許建索引 / 改邏輯
參考提示詞:
提示詞很長,并不是所有場景都需要,可以酌情去補。例如我今天這個查詢優(yōu)化的,直接讓 AI 去優(yōu)化,如果效果不行,再考慮補充對索引等方式的解釋。
亦或是無法用 GPTo3 的,也就是大模型能力差點的,就只能通過補充更完整的提示詞去優(yōu)化結(jié)果。
# SQL Server 性能調(diào)優(yōu)請求(保持結(jié)果一致)
我有一段在**SQLServer**上運行的查詢,當(dāng)前完整SQL已貼在下方代碼塊中。實際耗時約**1039秒**(取最近平均值/或填最新一次測量值)。
目標:**在不改變結(jié)果集(行數(shù)、金額、度量指標全部一致)的前提下,將執(zhí)行時間壓到≤100秒**;如無法達成,請給出分檔優(yōu)化方案(≤300s、≤100s、≤30s)并說明所需額外條件。
—
## 已知信息(請用你需要的結(jié)構(gòu)化方式復(fù)述并補充問題排查 SQL)
-**數(shù)據(jù)庫版本**:`<SQLServer2019?>`(若未知請詢問我)。
-**數(shù)據(jù)日期范圍**:`<YYYY-MM-DD~YYYY-MM-DD>`(與你SQL中篩選一致)。
-**關(guān)鍵業(yè)務(wù)口徑**:哪些字段/度量必須保持一致?(如:總行數(shù)、SUM(Amount)、SUM(qty)、SUM(retail_price))。
-**是否允許改寫業(yè)務(wù)邏輯?**默認*不允許*;只可在不改變結(jié)果的情況下重排、裁剪數(shù)據(jù)掃描、預(yù)聚合等。若需改邏輯請先列出風(fēng)險點讓我確認。
-**是否允許創(chuàng)建/建議索引?**(默認:可建議,不自動創(chuàng)建)。
-**是否允許使用臨時表(#temp)或物化中間結(jié)果?**(默認:**不允許**;若你認為必要,請解釋收益與代價)。
-**數(shù)據(jù)質(zhì)量提示**:可能存在重復(fù)主鍵/多對多/NULL/數(shù)據(jù)傾斜;若需驗證請生成檢查SQL。
-**并行/內(nèi)存/提示(HINT)**約束:若需使用OPTION(RECOMPILE)、MAXDOP等,請說明原因。
—
## 你需要輸出的內(nèi)容請按以下順序,逐段輸出(每段用清晰標題):
1.**快速復(fù)核**:復(fù)述我提供的業(yè)務(wù)口徑、限制條件、性能目標;指出仍缺失的信息并向我提問。
2.**瓶頸診斷**:基于查詢結(jié)構(gòu)(CTE、子查詢、JOIN、CONVERT導(dǎo)致索引失效等)推測主要耗時來源;給出我可執(zhí)行的`SETSTATISTICSIO,TIMEON`/`EXPLAIN`/`ACTUALEXECUTIONPLAN`指令清單。
3.**數(shù)據(jù)正確性守護清單**:列出必須驗證的指標(行數(shù)/金額/去重邏輯),并生成“原SQLvs優(yōu)化SQL”對比驗證腳本。
4.**分步優(yōu)化建議(從低風(fēng)險到高風(fēng)險)**:
-重排過濾順序/先裁剪再聚合 -消除非SARGable謂詞(如對日期列的CONVERT)
-預(yù)聚合/派生表降基數(shù) -必要時的索引/統(tǒng)計信息建議
-可選:物化或分階段執(zhí)行(若允許)
5.**提供至少一個“安全優(yōu)化版SQL”**:保證結(jié)果一致,可直接替換測試;在代碼內(nèi)用注釋標記關(guān)鍵改動。
6.**(可選)激進優(yōu)化版**:若放寬限制(如允許臨時表或索引)能進一步降到<X秒,請給示例。
7.**驗證腳本**:自動生成 -原SQL結(jié)果快照(行數(shù)、聚合指標)
-優(yōu)化SQL結(jié)果
-差異對比(行差、金額差、NULL差)
-執(zhí)行耗時采樣(可用temptable存放測試指標;若不允許請改為表變量或內(nèi)存統(tǒng)計)
8.**后續(xù)排查指引**:如果實際跑時仍超時,告訴我接下來要收集哪些執(zhí)行計劃信息發(fā)你繼續(xù)調(diào)優(yōu)。
—
## 輸出格式要求
-回答語言:**中文**(保留必要英文關(guān)鍵字)。
-每段前加序號標題,便于復(fù)制。
-所有SQL請包在markdown“`sql代碼塊內(nèi)。
-對于需要我補充的信息,用`<!–TODO:填寫–>`注釋標識。
-不要擅自更改業(yè)務(wù)邏輯;凡可能影響結(jié)果,請先提醒并等待我確認。
—
### 原始慢 SQL(請基于此分析)
“`sql—
原始SQLBEGIN<在此粘貼你的原始SQL;保持完整,包括CTE/注釋/WHERE條件>
—
原始SQLEND
同樣適合用 o3 的“強推理 + 高正確性”場景
下面這些工作都信息多、步驟長、結(jié)果必須對,用 ChatGPT o3 幫你拆步驟、生成檢查腳本、做差異核對,能省很多坑:
- 大型代碼庫重構(gòu) / 接口遷移 :跨多語言項目,要保持舊功能不壞,o3 可生成改動計劃 + 回歸測試清單。
- 財務(wù) / 運營系統(tǒng)對賬 :訂單、付款、發(fā)票數(shù)據(jù)來自不同系統(tǒng);o3 幫你定義對齊字段、差異報表、預(yù)警規(guī)則。
- 實驗 / A/B 分析流程復(fù)核 :樣本過濾、曝光口徑、指標計算要一致;o3 可產(chǎn)出驗證查詢、統(tǒng)計對照步驟。(不限定用哪種分析工具)
- 多語言內(nèi)容本地化一致性審校 :術(shù)語、變量占位符、隱私條款不能錯;o3 可批量對照源文 vs 翻譯文。
- 合同 / 政策文檔批量條款提取 :找關(guān)鍵條款、標風(fēng)險、比較版本差異;o3 生成結(jié)構(gòu)化清單。
- 營銷自動化流程調(diào)試 :觸發(fā)條件、頻控、名單交集復(fù)雜;o3 幫你畫流程、生成測試用例、模擬觸發(fā)數(shù)據(jù)。
- 機器學(xué)習(xí)數(shù)據(jù)清洗 & 標簽一致性檢查 :類別映射、缺失、分布漂移;o3 可輸出檢查腳本與數(shù)據(jù)質(zhì)量報告。
- 自動化報表發(fā)布前的數(shù)據(jù)閘口 :多源匯總,字段映射、缺失、閾值預(yù)警;o3 幫你生成預(yù)檢任務(wù)。
以上,既然看到這里了,如果覺得不錯,隨手點個贊、推薦、轉(zhuǎn)發(fā)三連吧,你的支持是我持續(xù)創(chuàng)作的動力。
本文由人人都是產(chǎn)品經(jīng)理作者【餅干哥哥】,微信公眾號:【餅干哥哥AGI】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
不能僅僅一個個例否定其他的工具。