MySQL資料庫的資料類型非常多,選擇正确的資料類型對于獲得高性能至關重要。資料的存儲和存儲引擎有關,不同的存儲引擎存儲相同類型的資料時可能方式不一樣。
一般把握以下幾點:
- 更小的通常更好
- 一般情況下,應該盡可能使用正确存儲資料的最小資料類型。更小的資料類型通常更快。
- 簡單就好
- 簡單的資料類型的操作通常需要更少的CPU周期。
- 盡量避免使用null,通常情況下最好指定列為NOT NULL。
- 可為null的列使得索引、索引統計和值比較都更複雜。
- 可為null的列會使用更多的存儲空間,在MySQL裡面做特殊處理。
資料類型分析
- 整數
-
- MySQL提供了幾種整數類型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。分别使用8、16、24、32、64位存儲空間。
- 整數類型有可選的UNSIGNED屬性,表示不允許負值(這樣可以擴大正數的範圍)。
- 對于存儲和計算來說INT(11) 和INT(20)是相同的,隻是規定了MySQL的一些互動工具用來顯示的字元的個數。
- 實數
- MySQL提供了幾種實數類型:FLOAT、DOUBLE、DECIMAL。FLOAT、DOUBLE分别使用32、64位存儲空間。DECIMAL在MySQL 5.0和更高版本中允許最多65個數字。
- DECIMAL可以存放比BIGINT更大的數字,一般盡量在對小鼠進行精确運算時才使用。
字元串類型
- MySQL提供了幾種字元串類型:VARCHAR、CHAR。VARCHAR用來存儲可變長度的字元串。
- VARCHAR比定長字元串更節省空間,因為它僅使用必要的空間,是以對性能也有幫助。但在update時需要比原來更長,這就導緻額外的工作。
- VARCHAR最适合字元串列的最大長度比平均長度大很多,列的更新很少。
- CHAR類型是定長的。MySQL在哪個是根據定義的字元串長度配置設定足夠的空間。
- 存儲char值是,MySQL會删除所有的末尾空格。
- char适合存放很短的字元串,所有的長度都接近一個長度的資料,如MD5值。
- 慷慨是不明智的。VARCHAR(5)和VARCHAR(200)存儲‘hello’的空間開銷是一樣的。但是更長的列會消耗更多的記憶體。
BOLB和TEXT類型
- BOLB和TEXT都是為存放大資料而設計的字元串資料類型。分别采用二進制和字元方式存儲。
- 字元類型是:TINYTEXT、SMALLTEXT、TEXT、MEDIUMTEXT、LONGTEXT,對應的二進制類型是:TINYBLOB、SMALLBLOB、BLOB、MEDIUMBLOB、LONGBLOB。BLOB是SMALLBLOB的同義詞、TEXT是SMALLTEXT的同義詞。
使用枚舉代替字元串類型
- 有時候可以用枚舉列代替常用的字元串類型。沒劇烈可以把一些不重複字元串存儲成一個預定義的集合。
日期和時間類型