mysql創建表時字段類型選擇與優化

一、選擇原則

1.應該儘量使用可以正確存儲數據的最小字段類型

2.選用簡單的數據類型,例如:一個是儘量用mysql內置的字段類型來存儲日期和時間;另一個存儲IP地址儘量用整型;能用整型的儘量不用字符串類型

3.儘量避免使用NULL,例如:打算創建索引的字段,不要設置爲NULL

二、常用的字段類型的選擇說明

1.日期和時間類型

TIMESTAMP與DATETIME都可以存儲相同類型的數據,並且精確到秒,可是TIMESTAMP只使用DATETIME一半的存儲空間,並且它可以根據時區變化,具有特殊的自動更新能力。

存儲空間:TIMESTAMP佔用4個字節,DATETIME佔用8個字節

2.整數類型

tinyint(8bit), smallint(16bit), mediumint(24bit), int(32bit), bigint(64bit)

整數計算一般使用64位的bigint整數,一個細節需要注意的地方,INT(1)與INT(20)對於存儲和計算來說寬度是相同的,對於INT型字段來說指定寬度是多餘的

3.實數類型

浮點類型(float, double)與decimal類型在性能上,浮點類型更好一些,同樣範圍的值,浮點類型比decimal佔用更少的空間
轉自:https://www.cnblogs.com/goujian/p/9346823.html

4.不要使用null
爲什麼這麼說呢,因爲MYSQL對NULL字段索引優化不佳,增加更多的計算難度,同時在保存與處理NULL類形時,也會做更多的工作,所以從效率上來說,不建議用過多的NULL。有些值他確實有可能沒有值,怎麼辦呢?解決方法是數值弄用整數0,字符串用空來定義默認值即可。

5.字符串類型的使用
字符串數據類型是一個萬能數據類型,可以儲存數值、字符串、日期等。
保存數值類型最好不要用字符串數據類型,這樣存儲的空間顯然是會更大,而且在排序時字符串的9是大於22的,其實如果進行運算時mysql會將字符串轉換爲數值類型,大大降低效果,而且這種轉換是不會走原有的索引的。
如果明確數據在一個完整的集合中如男,女,那麼可以使用set或enum數據類型,這種數據類型在運算及儲存時以數值方式操作,所以效率要比字符串更好,同時空間佔用更少。

6.VARCHAR與CHAR
VARCHAR是可變長度字符串類型,那麼即然長度是可變的就會使用1,2個字節來保存字符的長度,如果長度在255內使用1個字節來保存字符長度,否則使用2個字符來保存長度。由於varchar是根據儲存的值來保存數據,所以可以大大節約磁盤空間。
如果數據經常被執行更新操作,由於VARCHAR是根據內容來進行儲存的,所以mysql將做更多的工作來完成更新操作,如果新數據長度大於老數據長度一些存儲引擎會進行拆分操作處理。同時varchar會完全保留內部所有數據,最典型的說明就是尾部的空格。
CHAR固定長度的字符串保存類型,CHAR會去掉尾部的空格。在數據長度相近時使用char類型比較合適,比如md5加密的密碼用戶名等。
如果數據經常進行更新修改操作,那麼CHAR更好些,因爲char長度固定,性能上要快。

7.數值類型的選擇
數值數據類型要比字符串執行更快,區間小的數據類型佔用空間更少,處理速度更快,如tinyint可比bigint要快的多
選擇數據類型時要考慮內容長度,比如是保存毫米單位還是米而選擇不同的數值類型
整數
整數類型很多比如tinyint、int、smallint、bigint等,那麼我們要根據自己需要存儲的數據長度決定使用的類型,同時tinyint(10)與tinyint(100)在儲存與計算上並無任何差別,區別只是顯示層面上,但是我們也要選擇適合合適的數據類型長度。可以通過指定zerofill屬性查看顯示時區別。

8.浮點數與精度數值
浮點數float在儲存空間及運行效率上要優於精度數值類型decimal,但float與double會有舍入錯誤而decimal則可以提供更加準確的小數級精確運算不會有錯誤產生計算更精確,適用於金融類型數據的存儲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章