选择优化的数据类型

来源:互联网 发布:深入浅出avr单片机pdf 编辑:程序博客网 时间:2024/05/18 03:40
数据类型选择的原则:
1、更小的通常更好
更小的数据类型通常更快,因为它占用更少的磁盘,内存和cpu缓存,并且处理时需要的cpu周期也更少。
2、简单就好
简单的数据类型的操作通常需要跟梢的cpu周期。
3、尽量避免NULL
可为null的列会使用更多的存储空间,在mysql中需要特殊处理。如果查询中包含可为null的列,对Mysql来优化难度大,这是因为为null的列是的索引,索引统计和值比较都更复杂。如果计划在列上建索引,就应该尽量避免设计成可为null的列。

整数类型
mysql中有几种整数类型: tinyint、smallint、mediumint、int、bigint。分别使用8、16、24、32、64位的存储空间。他们的存储的值的范围可以从-2^(N-1)到2^(N-1)-1,其中N是存储空间的位数。如mysql某个字段选择是tinyint,那么它的数值的范围是-256到255。若是使用自增(autoincreament),最大值也就是255,超过这个值就会报错。另外给整数类型添加长度是没必要的,如tinyint(2)。它和tinyint(10000)是一样的,数值的存储范围都是-256到255。它只是规定了mysql的一些交互工具(客户端)用来显示字符的个数。

varchar和char类型
1、varchar
varchar用于存储可变长字符串,是最常见的字符串数据类型。它比定长数据类型更节省空间,所以性能也更好。因为它使用必要的存储空间(例如,越少的字符串使用越少的存储空间)。有一种情况例外,如果mysql使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会浪费空间。varchar(n):长度为n个字节的长度可变且非Unicode的字符数据。n必须是一个介于0和65536之间的数值。存储大小为输入数据的字节的实际长度,而不是n个字节。所输入的数据字符长度可以为零。varchar使用1个或2个额外的字节记录字符串的长度。如果列的长度varchar(n)中 n>=255 则只使用1个字节,否则使用2个字节。如varchar(1),实际分配2个字节,varchar(300)实际分配302个字节。由于行是变长的,在update可能使行变得比原来更长,这就导致需要额外的工作,处理也复杂,还会产生碎片。
2、char
char用于存储定长字符串,如char(32)分配32个字节。当存储char值时,mysql会删除所有的末尾空格,如 name="aa    ",当使用select length(name)时,长度是2,没有空格的长度。char会根据需要采用空格填充以便比较。如char(32)中,存储的是name="ab"两个字符,这时,char会在后边填充30空格填充,保证完全是32个字节。但是使用select length(name)查询时,长度依然是2。char适合存储很短的字符串或者长度接近的字符串。如MD5加密值,因为这是一个定长的值。对于非常短的字符串,char类型比varchar类型在存储空间上更有效率,如 char(1) 只用1个字节存储Y或N,而varchar(1)却需要2个字符,因为还有一个额外的字节需要存储字符串的长度。另外,对于经常update的数据来说,char也比varchar好,因为定长的char类型不容易产生碎片。
0 0
原创粉丝点击