iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
佛心分享-IT 人自學之術

軟體工程師的湖濱散記系列 第 7

07 SQL 地獄散記| 我昨天寫完結果沒送出(吐血

  • 分享至 

  • xImage
  •  

SQL 語法我已經要調快一週了,因為資料量很大,所以要在 DAO 層直接寫 SQL 在資料庫查詢同時直接聚合出結果,我也不知道為什麼我可以搞這麼久,確實我從沒寫過這麼複雜的 SQL,但就是怎麼改都過不了 Review,快瘋了。

但我好像一直都沒靜下心來好好想該怎麼寫最好,一直叫 ai 生成後測試,看結果如何,跑一下執行計畫看看有沒有吃到索引之類的,Join 東 Join 西的好煩啊,有時沒寫 Join 但其實 SQL 執行計畫會用 Join 來跑,所以還是要小心。

第一次認識 CTE,基本上它不就是臨時表的概念嗎?好像沒啥特別,就等於是用個子查詢,然後把結果用變數存起來這樣,後面還能複用,不過它幫我不少忙,寫到一個 summary 的聚合時,因為用了兩個 CTE 的結果都是一行,所以用 from 表1, 表2 時原本應該會變成 cross join,但 CTE 幫我避開了笛卡爾乘積。
Left Join 會產生很多空欄位,要避免。最好是先用 CTE 處理過,再去 Left Join 兩張表,可以減少不必要的空欄。

COALESCE 如果值是 Null 就給預設。
ROUND 設小數點後幾位。
之類的。

執行計畫可以看到資料庫實際上是怎麼跑語法的策略,有時候會跟預想不同,跟資料量大小也有關,資料太小就直接掃全表了,不會用索引優化等等的。


上一篇
06 JVM 散記
下一篇
08 Docker 之救贖|昨天的紀錄就因為忘記發布而中止(冤
系列文
軟體工程師的湖濱散記11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言