天天看點

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

使用枚舉代替字元串類型

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

日期和時間類型