MYSQL 數據類型

MySQL數據庫的數據類型非常多,選擇正確的數據類型對於獲得高性能至關重要。數據的存儲和存儲引擎有關,不同的存儲引擎存儲相同類型的數據時可能方式不一樣。

一般把握以下幾點:

  1. 更小的通常更好

    1. 一般情況下,應該儘可能使用正確存儲數據的最小數據類型。更小的數據類型通常更快。

  2. 簡單就好

    1. 簡單的數據類型的操作通常需要更少的CPU週期。

  3. 儘量避免使用null,通常情況下最好指定列爲NOT NULL。

    1. 可爲null的列使得索引、索引統計和值比較都更復雜。

    2. 可爲null的列會使用更多的存儲空間,在MySQL裏面做特殊處理。

數據類型分析

  1. 整數


    • MySQL提供了幾種整數類型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。分別使用8、16、24、32、64位存儲空間。

    • 整數類型有可選的UNSIGNED屬性,表示不允許負值(這樣可以擴大正數的範圍)。

    • 對於存儲和計算來說INT(11) 和INT(20)是相同的,只是規定了MySQL的一些交互工具用來顯示的字符的個數。

  1. 實數

  • 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的同義詞。

使用枚舉代替字符串類型

  • 有時候可以用枚舉列代替常用的字符串類型。沒劇烈可以把一些不重複字符串存儲成一個預定義的集合。

日期和時間類型

  • DATETIME存放的時ANSI標準定義的日期和時間表示方法,精確到秒。

  • TIMSTAMP保存了從1970年1月1日午夜以來的秒數,它和UNIX時間戳相同。

  • 除了特殊行爲之外,通常也應該儘量使用TIMESTAMP,因爲它比DATETIME空間效率更高。

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