赞
踩
为了更好的提高系统性能,选择合适的数据类型非常重要,以下几个简单的原则有助于你更好的做出选择:
1、更小通常是最好的:越小,占用cpu、磁盘和内存越少
2、尽量简单:简单的数据类型可以减少cpu开销
3、尽量避免null:包含null值的列在sql语句中通常很难优化
数据类型 | 占用存储空间 | 范围 |
---|---|---|
tinyint | 8位 | -128~127 |
smallint | 16位 | -32 768,32 767 |
mediumint | 24位 | -8388608~8388607 |
int | 32位 | -2147483648~2147483647 |
bigint | 64位 | ±9.22*10的18次方 |
注意:
1、整数类型有个UNSIGED
属性,表示不允许你负值,这大致可以让数据类型的上限提高一倍。
2、很多情况下,对于 int(1)和 int(20),只是限制了显示字符的个数,对于存储和计算是相同的
什么是实数?
就是带有小数点的数字。
float(M,N):4个字节存储,8位精度
double(M,N):8个字节存储,16位精度
M:总长度
N:小数位数
decimal
不仅可以存带有小数点的数据,也可以存储比 bigint
还大的数据
decimal(M,D)
// M: 数字的最大长度 (5.0 以后,最大上限位 65 ; 之前是 254 位)
// D: 小数位数 (D < M , D < 30)
注意:
cpu不支持对decimal的直接计算,所以decimal只是一种存储格式,在计算的时候,还是会转换为double类型
1、varchar
特点:
1、存储可变长字符串
2、设置: ROW_FORMAT = FIXED ,会变成每一行都定长存储,浪费空间
3、需要额外的 1 到 2 个字节存储字符串长度
适用的列:很少去更新的那种
2、char
会自动剔除字符串末尾的空格(在4.1版本之前,varchar也是这么实现的,那个时候,它们只有存储格式不一样)
适合的列 :
1、很短的字符串
2、所有值长度都近似
选择方法按存储引擎分类:
MyISAM:MyISAM数据表,最好使用固定长度(char)的数据列代替可变长度(varchar)的数据列。
MEMORY:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用char或varchar列都没有关系。两者都是作为char类型处理的。InnoDB:建议使用 varchar类型
char 和 varchar 保存和检索方式是不同,最大长度和是否尾部空格被保留等方面也不同,以下图为例:
3、binary 和 varbinvar:存储二进制字符串 (binary 使用 \0 来填充)
4、text :存储数据量非常大的字符串
和varchar的对比:
1、不能有默认值
2、必须创建前缀索引
3、不能像 varcha(n) 一样设置 n
5、blob :存储数据量非常大的二进制字符串
和text对比:
1、存储方式不同:text
存储文本,区分大小写,blob
二级制方式存储,不区分大小写
2、blob
只能整体读出
3、text
可以指定字符集,blob
不能
datetime
1、范围:1001 ~ 9999,精度位秒,与时区无关,8字节存储
2、格式:YYYYMMDDHHMMSS
timestamp
1、范围: 1970.01.01 ~ 2038.12.31
2、与时区有关
3、此类型默认位 not null 类型,如果你插入的时候,没有填写时间,默认位当前时间
综合对比:
1、通常情况下,使用timestamp
,它对达特time空间效率更高
2、但是timestamp
的行为比较复杂,你在选用这个数据类型的时候,需要验证以下它的行为是否符合你的需要
bit
1、用来存储一个或者多个 true
/ false
2、最大长度 64 位
3、在mysql,它被作为字符串类型存储
1、《高性能 MySQL》 图书
2、MYSQL中数据类型介绍
简单总结,如有不足,欢迎指出交流,如果感觉不错,欢迎点赞评论支持!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。