mysql 数据类型优化

  1. 更小的通常更好

  2. 简单就好

  3. 尽量避免null 

一、整数类型

    有两种类型的数字 :整数和实数。如果存储整数,可以使用这几种整数类型:TINYINT,SMALLINT,DEDIUMINT,INT,BIGINT.分别使用8,16,24,32,64位存储空间。

使用UNSIGNED属性,表示不允许复制,这大致可以例正数的上限提高一倍。

二、实数类型

    实数是带有小数部分的数字。然而,它们 不只是为了存储小数部分;也可以使用DECIMAL存储比BIGINT还大的整数。MySQL既支持精确类型,也支持不精确类型。

DECIMAL类型用于存储精确的小数。因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL--例如存储财务数据。但在数量比较大的时候,可以考虑使用BIGINT代替DECIMAL,将需要存储的货币单位根据小数的位数乘以相应的倍数即可。假设要存储财务数据精确到万分之一分,则可以反所有金额乘以一百万,然后将结果存储在BIGINT里这样可以同时避免浮点计算不精确和DECIMAL精确计算代价高的问题。

三、字符串类型

    VARCHAR和CHAR是两种最主要的字符串类型。

    VARCHAR类型用于存储可变长字符串,如果MySQL表使用了ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间。VARCHAR需要使用1或2个额外的字节记录字条串的长度

    CHAR类型是定长,CHAR适合存储很短的字符串,或者所有值都接近同一个长度。比如MD5值,因为这是一个定长的值。

对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR 类型不容易产生碎片。


---- 新加内容-----

   慷慨是不明知的:

   使用VARCHAR(5)和VARCHAR(200) 存储'hello' 的空间开销是一个样的。那么使用更短的列有什么优势吗?

事实证明有很大的优势。更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块内部值。尤其是使用内存临时表进行排序或操作时会特别糟糕。在利用磁盘家庭纠纷哥进行排序时也同样糟糕。

所以最好的策略是只分配真正需要的空间。

你可能感兴趣的:(mysql类型优化)