Table of Contents

先前我們在 SQL Fiddle:免安裝、免註冊的SQL線上模擬器 這篇文章當中,介紹過一款不用安裝、可以直接在瀏覽器上跑的簡易 SQL 模擬器 SQL Fiddle ,這個工具我個人使用了很多年,能在沒有辦公室或學校等 SQL 環境下,也能隨時練習以及驗證腦中的想法,非常實用!

這兩年 AI 大語言模型大爆發,SQL Fiddle 的作者也決定要把 SQL Fiddle 改成能夠支援 AI 功能,而且改版之後仍維持免費提供 (佛心),今天我們就來比較一下新舊版的差異,看看究竟有沒有變得更聰明呢?

新版改成需要登入後使用

在舊有的版本裡,SQL Fiddle 是完全不需登入就能直接使用的。而到了新版,則是每個人每天給予50,000 個 token (畢竟接OpenAI 的API 還是需要成本),以做為個人用途的沙盒來說算是堪用了,真的用完的話每天都會重新補滿五萬個。(但也因此變得需要登入了,簡單用平常慣用的登入方式即可)

(以目前截止的openai api 成本標價,即使是最便宜的gpt3.5-turbo-0301,每百萬 token 的價格也要 input $1.5, output $2.0)

支援的SQL版本

在新版的 SQL Fiddle 當中,新增了 MariaDB 以及 Oracle PLSQL。但相較於舊版,在這次的改版裡面就沒有特別寫上這些對比的是什麼版本的 SQL,如果要對某些特定版本的語法測試的話,可能會覺得有點迷惘。

新版介面砍掉重練

在原先的舊版裡面,是左邊寫 schema 後先 build schema,再到右側寫好 SQL query 之後才 run SQL;而到了新版則是由上到下都寫在一起,再按 execute 即可。

(舊版)
(新版)

新版的 AI 相關功能

打開新版介面的左側欄,可以看到自己的登入狀態、今天剩餘的token數量 (每天有 50,000 個,圖片裡我已經用掉了一些,剩下 49,460 個),以及「Chat」、「Editor」、「History」三個功能活頁。(目前 History 功能尚未開放)

Chat 功能

在新版裡,我們可以在 Chat 分頁裡直接以口語化的方式問它關於我們右側 SQL 當中的問題。由於它是直接去接 OpenAI 提供的 api,所以我們用任何 ChatGPT 能支援的語言來發問,理論上它應該都能理解。

在這個例子裡,我試著用兩種語言問它相同的問題,但遺憾的是,雖然 ai 助理都能夠理解我的語意,但兩種語言給出的答案是不同的、而且都不正確 (都使用了不存在的欄位名稱)。但雖然它的答案不能直接拿來用,姑且當作靈感參考還是勉強可以的。畢竟在我們這次的範例裡,用來記錄 ”商店產品” 這種東西的列表,確實是需要一個能夠紀錄 unique ID 的欄位會比較合理。

除了直接問它問題之外,我們也可以把不懂的片段選起來,在右鍵選單裡找到「Explain」讓他解釋這段的意思:

除了 Explain,它也可以協助把格式整理好、幫忙找bug、還可以 minimize 跟 optomize 效能,也能幫忙 review,算是滿多功能的 (這邊就不一一貼圖了)。

但可能是因為成本關係,它這些內建的 AI 功能並不能說是特別好用,如果是 SQL 初學者,可能反而會被一些不預期的怪答案給帶偏,所以還是需要有足以自行進行一般除錯的 SQL 程度。如果不嫌麻煩的話,把問題拿去問我們平常慣用的語言模型,應該能夠得到理想很多的答案。

Editor 功能

除了 Chat 功能之外,在新版的 SQL Fiddle 還可以直接選取任意的 SQL 文字片段後,在右鍵選單裡選擇「Edit code with AI」,讓 AI 幫忙修改裡面既有的一些 code。

比如說,我需要 table 裡面的資料筆數能夠多一些,但又懶得一筆一筆去建,這時我就可以把 value那一段選取起來,讓 AI 幫我多生成一些:

在右鍵選單裡選擇「Edit code with AI」之後,在左側「Editor」欄當中寫下希望 AI 能幫忙修改什麼 (比如在這裡是讓它再加 10 條資料),再按下「Generate / Modify」按鈕,就可以在下方的預覽當中看到它生成的結果。

接著,我們可以在「Generated/Edited SQL:」的文字框裡,檢查它生成出來的結果或語法是否正確,如果有問題也可以先在這裡修改編輯。比如圖中的結果,雖然它有照指令生了新的 values 出來,但只生了 7 條,這時我們就需要改。

都沒問題之後就按下「Insert/Replace in SQL Editor」把這段插進原有的code裡。(這裡要留意它按鈕沒有防呆,一直按它就會一直插入XD)

消失的 Execution Plan

在檢查 SQL 查詢效能時,看看 Execution Plan 圖表是一個好方法。因為它能清楚顯示每個步驟花了多少資源,幫助我們找出效能瓶頸,還可以判斷是否要加索引、調整查詢結構,來讓執行速度更快。而且對比不同寫法的 Execution Plan,也能幫助我們看具體到底是優化了多少。

在舊版的 SQL Fiddle 裡面,我最喜歡的也是這個功能,它應該是我看過唯一可以不用額外安裝任何東西就能看 Execution Plan 的,用來快速驗證想法非常方便。

但到了新版,我卻找不到這樣的功能 (希望只是剛改版完不久,作者還來不及加上去@@),在目前的新版介面裡,我能找到勉強能達到類似效果的方式,是全選 code 之後,在右鍵選取「Chat / Help」,再輸入希望 chatGPT 繪製 ASCII execution plan for the SQL query 的需求:

出來的結果…只能說畢竟是執行後再事後讓 chatGPT 再現的,參考性真的不能說很高,能把這個樹枝狀畫出個樣子對它來說就已經很極限,cost 的正確性與詳細資料實在是不忍苛求…。

想要用舊版怎麼辦

這樣試用下來一輪之後,雖然可以感受到作者的熱情跟用心,畢竟這都是無償提供的 (再次感恩的心),但私心上還是希望能有舊版的可以使用,那該怎麼辦呢?好在,作者有在 github 放上自己的舊版網頁,有興趣的人還是可以抓到本地端運行並練習:https://github.com/zzzprojects/sqlfiddle3