TIMESTAMP
和DATETIME
存储时间和日期,精确到秒。TIMESTAMP
只使用DATETIME
一半的存储空间,并且会随时区变化,具有特殊的自动更新能力。但是TIMESTAMP
的时间范围要小得多。
选择的数据类型只能决定MySQL在内存和磁盘中是怎样保存数据的,数据的计算与存储无关
整数类型 | 存储空间 |
---|---|
TINYINT | 8 |
SMALLINT | 16 |
MEDIUMINT | 24 |
INT | 32 |
BIGINT | 64 |
实数类型 | 存储空间 |
---|---|
FLOAT | 32 |
DOUBLE | 64 |
DECIMAL | 动态的。可以指定小数点前后的最大位数,每4个字节存储9个数字,小数点占一个字节 |
DECIMAL
只是一个“存储类型”,其运算依赖于具体实现。MySQL4.1以及更早的版本使用浮点运算来实现DECIMAL
的运算,在MySQL5.1及更高的版本中,服务器自身实现了DECIMAL
的高精度计算。相对而言,CPU直接支持原生浮点运算,所以浮点运算明显更快。
VARCHAR | CHAR | |
---|---|---|
空间大小 | 字符串本身存储空间加额外的1或2字节的字符串长度信息 | 固定大小 |
字符串列的最大长度比平均长度大很多 | 适用 | 不适用 |
列更新频繁 | 适用 | 不适用 |
使用变长编码的字符集,如utf-8 | 适用 | 不适用 |
末尾空格 | 保留 | 不保留 |
列的长度短 | 不适用 | 适用 |
DATETIME | UNIXTIME | |
---|---|---|
表示范围 | 1001~9999 | 1970~2038 |
存储空间 | 8个字节 | 4个字节 |
时区 | 无关 | 有关 |
随机产生的字符串,如UUID,MD5,SHA1等,会分布在很大的空间内,导致INSERT以及SELECT语句变得很慢:
高性能MySQL学习系列(一)--Schema与数据类型优化
原文:https://www.cnblogs.com/zkwen/p/13031345.html