讀者 Saka 的問題與回答

摘要:讀者 Saka 的問題與回答

問題:
章老師您好,最近讀了您新出的「圖表與實務案例模組大全」,在第10章中的Manager資料表,其中有一點想請教您,那就是資料表中的 mg_name 為什麼不是使用nvarchar而改用nchar呢?是不是有什麼好處?

麻煩您了,謝謝

回答:

這 是一個很好的問題,也是一般人常會問的欄位使用取捨的問題。nvarchar 和 nchar 最大的差異就是前者是在儲存時,是會依據字串的長度不同,而以不同的長度來儲存。而後者nchar是固定長度,也就是不管你是用 1 個字元,還是 10 個字元,只要欄位是 12,就是使用 12 個字元的空間來儲存。

在空間的利用 上,nvarchar 是佔了優勢,而且使用起來也很方便。但是有一個隱藏而容易忽視的問題,一般在開發時都不會發現,那就是「效率」。尤其這個欄位是拿來做索引值,而且資料量 很大的時候,如果用 nchar 處理欄位搜尋,會比 nvarchar 快很多。這個欄位我們在做分析時,認為是重要而且會經常被拿來搜尋的一個欄位,所以在設計時就使用 nchar 來處理。

通常在使用 nvarchar 時,大概都是在字串長度可能會超過 50 時才會使用,不然基於效能的考量,都是會用 nchar 來處理。(資料如果只有幾百筆時,其實沒有明顯的差距)

PS:拿來做索引的字串欄位,在SQL中有一個長度上限,不是隨意長度的欄位都能做索引值。

章立民研究室