想學好程式?那你一定要搞懂 hint 用法!

誒,大家今天要來跟大家分享一下我最近在資料庫優化上的一個小發現,就是關於 Hint 的用法。之前一直覺得 Hint 是個很玄的東西,好像是給那些大神用的,我們這種小咖就隨便寫寫 SQL 就好。但最近遇到一個查詢效能瓶頸,搞半天都沒搞定,最後還是靠 Hint 才解決,所以今天就來跟大家分享一下我的實戰經驗。

一開始,我遇到一個超慢的查詢,大概長這樣:

想學好程式?那你一定要搞懂 hint 用法!
SELECT  FROM 某個很大的表 WHERE 條件一堆;

跑起來真的是等到天荒地老,我都快睡著。本來想說加個索引試試看,結果加也沒啥用,還是一樣慢。後來我就想說,死馬當活馬醫,來試試看 Hint 好。

什麼是 Hint?

簡單來說,Hint 就是一種可以告訴資料庫「你要怎麼執行這個查詢」的指令。就像你跟一個很笨的員工說:「欸,你去把那個檔案拿來,記得要從左邊的抽屜拿,不要拿錯!」Hint 就是那個「記得要從左邊的抽屜拿」的指令。

那 Hint 要怎麼用?其實不難,就是在 SELECT、DELETE 這些關鍵字後面,加上一個註解,然後在註解裡面寫上你要給資料庫的指令。不過要注意的是,這個註解的格式有點特別,一定要是 /+ ... / 這樣,中間的加號不能省略,也不能有空格,不然資料庫會看不懂。

我查一下資料,發現有很多種 Hint 可以用,像是 ALL_ROWSFIRST_ROWS 這些,看得我眼花撩亂。後來我發現一個叫 ALL_ROWS 的 Hint,好像是跟「最佳吞吐量」有關,感覺就是可以讓查詢跑快一點的樣子,所以我就決定先試試看這個。

所以我就把我的 SQL 改成這樣:

SELECT /+ ALL_ROWS /  FROM 某個很大的表 WHERE 條件一堆;

然後再跑一次,哇!竟然變快!雖然沒有快到飛起來,但是至少不用等到睡著。這時候我才知道,原來 Hint 這麼好用!

繼續實驗

後來,我又試幾個不同的 Hint,像是指定要用哪個索引之類的,發現有些 Hint 真的可以讓查詢變快,但有些 Hint 就沒什麼效果,甚至還會讓查詢變慢。Hint 這種東西,還是要多試試看,才知道哪個最適合你的查詢。

經過這次的經驗,我學到一件事:

想學好程式?那你一定要搞懂 hint 用法!
  • 遇到慢查詢不要放棄,可以試試看 Hint。
  • Hint 有很多種,要多方嘗試。
  • Hint 不是萬靈丹,有時候還是要從 SQL 本身下手。

總之,Hint 是一個很有趣的東西,雖然有點難懂,但是學會之後,真的可以讓你的 SQL 功力大增。希望今天的分享對大家有幫助,下次遇到慢查詢的時候,不妨試試看 Hint !

首頁 英文水平測試 0元領取試聽課