验证中...
Languages: SQL
Categories: 数据库相关
Latest update 2019-05-12 17:53
数据类型优化
Raw Copy
Schemal与数据类型优化
1、选择优化的数据类型
1)选择正确存储数据的最小数据类型,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更少
2)简单数据类型需要更少的CPU周期,整型比字符串操作代价更低
3)尽量避免NULL,如果查询中包含为NULL的列,对MySQL来说更难优化,因为可为NULL的列使得索引,列得值更难优化。
可为NULL的列会使用更多的存储空间,在MySQL里也需要特殊处理。当可为NULL的列被索引时,每个记录需要一个额外
的字节
2、整数类型
1)TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别使用8、16、24、32、64位存储空间
3、实数类型
1)DECIMAL类型比FLOAT和DOUBLE类型的数据计算的更精确,精度更高。DECIMAL只是一种存储格式,在计算中DECIMAL会
转换位DOUBLE类型
4、VARCHAR和CHAR类型
VARCHAR和CHAR两种字符串类型存储在磁盘和内存空间是根据存储引擎相关的
1)VARCHAR
VARCHAR用于存储可变字符串长度,它比定长类型更节省存储空间,带来上了性能的优化,但同时执行UPDATE操作的时候
由于行是变长的,执行UPDATE的时候可能使得行变得更长,这就导致需要做额外的工作
2)CHAR
CHAR值是定长的,MySQL总是根据定义的字符串长度分配足够的空间,对于存储MD5加密字符串时,使用定长的字符串不容易产生碎片
5、BLOB和TEXT类型
1)与其它类型不同,MySQL会把每个BLOB和TEXT当作一个独立的对象处理。存储引擎在存储时会做特殊处理。当BLOB和TEXT值太大时,
InnoDB会使用专门的"外部"存储区域来进行存储,此时每个值在行内需要1~4个字节存储一个指针,然后在外部存储区域存储实际的值
6、使用枚举(ENUM)代替字符串类型(实际中不推荐使用)
枚举列可以把一些不重复的字符串存储成一个预定义的集合。MySQL在存储枚举时非常紧凑,会根据列表值的数量压缩到一个或者两个字节中。
MySQL在内部会将每个值在列表中的位置保存位整数,并且表的.frm文件中保存”数字-字符串“映射关系的查找表
由于枚举字段只能存储不重复的整数中,所以修改的时候必须通过alert table命令,所以特别影响性能
7、日期和时间类型
1)DATETIME
能保存大范围的值,能存储1001年到9999年,精度为秒,有8个字符的存储空间
2)TIMESTAMP
TIMESTAMP只使用了4个字节的存储空间,因此范围比DATETIME小很多,TIMESTAMP显示的值依赖于时区
除了特殊行为之外,通常也应该尽量使用TIMESTAMP,因为它比DATETIME效率更高

Comment list( 0 )

You need to Sign in for post a comment

Help Search

Gitee_you_jiang_zheng_wen Zheng_wen_close