mysql的schema与数据类型优化分析

Schema与数据类型优化:

    

1.选择优化的数据类型

更小的通常更好:一般情况下,尽量使用可以正确存储数据的最小数据类型

如:只需存0-200,tinyint unsigned更好。

简单就好:如:整型比字符串操作代价更低,应该使用mysql内建类型而不是字符串来存储日期和时间。

尽量避免NULL:通常情况下最好指定列为NOT NULL,除非真的要存储NULL值。如:查询中包含可为NULL的列对mysql来说更难优化。


2. 选择类型范围

如DATETIME和TIMESTAMP列都可以存储相同类型的数据(时间和日期,精确到秒),但TIMESTAMP只使用

DATETIME一半的存储空间,并且会根据时区变化,具有特殊的自动更新能力。


3.整数类型

有两种类型的数字:整数和实数

如果存储整数,可使用TINYINT(8),SMALLINT(16),MEDIUMINT(24),INT(32),BIGINT(64).

整数类型有可选的UNSIGNED属性,表示不允许负值,可使正数上限提高一倍。如TINYINT UNSIGN可以存储的范围是0~255.

有符号和无符号使用相同的存储空间,并具有相同的性能。


4.实数类型:实数是带有小数部分的数字。


5.字符串类型:VARCHAR和CHAR是最主要的字符串类型。

VARCHAR:用于可变长字符串,比定长更省空间,因为它仅使用必要空间。

适合使用VARCHAR的情况:字符串列的最大长度比平均长度大很多;列的更新很少;

使用了UTF-8字符集

CHAR:是定长的,适合存储短的字符串,或所有值都接近同一个长度。如:存储密码的MD5值,

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

对于非常短的列,CHAR比VARCHAR在存储空间上也更有效率。如:用CHAR(1)存储只有N和Y的值只需一个字节,

但用VARCHAR(1)却要两个字节,因为还有一个记录长度的额外字节。

使用varhar(5)和和char(5)存储‘hello’的空间开销是一样的,更长的列会消耗更多的内存。 


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。