1. 程式人生 > >Mysql數據類型的優化選擇

Mysql數據類型的優化選擇

mysql

整數類型:

Tinyint-8

Smallint-16

Mediumint-24

Int-32

Bigint-64

實數類型(帶有小數部分的數字)

Float-4/double-8:浮點

Decimal:精確(只是存儲格式,在計算中會轉為double類型)

浮點類型在存儲同樣範圍的值時,通常比decimal使用更少的空間。

字符串類型

Varchar:可變長字符串(需要1-2個字節存儲字符串長度)

優點:比定長類型節約空間;

缺點:碎片問題。字符串update變長時,一個行的占用空間變長,但是在頁內沒有更多空間存儲,MYISAM將行拆成不同片段存儲,InnoDB分裂頁使行可以放進頁內;

適用:字符串最大長度比平均長度大很多;列的更新很少;

Char:定長字符串(mysql會刪除所有末尾空格)

優點:不易產生碎片

適用:存儲密碼的MD5值;經常變更的數據;

大型數據類型

Blob:二進制

Text:字符

特殊性:mysqlblobtext值當做一個獨立的對象處理,當值太大時,innodb在值內存儲一個指針,外部存儲區域存儲實際的值;mysqlblobtext的排序,只對每列的最前max_sort_length進行排序;mysql不能將列的全部長度字符串進行索引,也不能使用這些索引進行排序;

枚舉類型ENUM

mysql在存儲枚舉類型時非常緊湊;

Mysql在內部會將每個值在列表中的位置保存為整數,並且在表的.frm文件中保存“數字-字符串”的映射關系的查找表;

缺點:字符串列表是固定的,添加或刪除字符串都需要alter table

優點:可以縮小表的大小;主鍵減小後,innodb表的非主鍵索引也會變小;

關聯速度:enum列 關聯 enum> varchar列 關聯 varchar> enum列 關聯 varchar

日期時間類型

Datetime8字節;與時區無關;保存大範圍的值,從1001年到9999年,精度為秒;

Timestamp(盡量使用):4字節;依賴於時區;保存1970.1.1以來的秒數;列默認為not null

Timestamp的特殊性:如果插入數據時沒有指定第一個timestamp列的值,mysql則設置這個值為當前時間;


Mysql數據類型的優化選擇