SQL 語法學習-不要使用select * from

常常看到程式設計師在撰寫SQL語法時,貪圖方便,使用了:select * from 這個語法,早期筆者在使用php時也常用。但後來學了Go語言之後,覺得Go需要把每個要使用的欄位都寫出來,覺得很麻煩,也覺得沒有彈性,後來用久了之後,覺得把要使用的欄位都寫出來是一個好的模式。底下慢慢解釋:

一、不必要的IO

大部分時候,我們不會使用到全部的欄位,但用了*之後,系統會需要準備額外的空間與IO讀取時間來處理與取得欄位資訊,無形中造成程式記憶體空間需錢變大與額外的IO時間。

二、額外的傳輸時間

不必要的欄位除了造成IO讀取時間變長外,通常我們AP程式不會與DB主機位於同一台機器,因此就會有額外的網路傳輸量,造成網路傳輸資料也會增多。

三、與程式的相依程度變高

由於採用*。因此取回來的資料就會依照DB建置的順序來回傳,若之後中間增加/減少額外的欄位時,回傳欄位順序就會改變,造成程式需要跟著調整,會拉高程式與資料的相依性。

四、過多的訊息,提高資安風險

有些不需要取得的資訊,但被取得,有可能造成取得過多不必要資訊,而導致機敏資料外洩的資安問題。

此外還可能有:View的被破壞、Join語法問題與表格間資料複製等問題。因此,在使用SQL語法時,盡量寫完整的欄位,少用*,以避免衍生其他問題。