数据库 数据类型的优化

选择优化的数据类型

  • 更小数据类型的更好
  • 简单数据类型
  • 尽量避免NULL
    特别在列上建索引的时候。当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里会导致固定大小的索引变成可变大小的索引。
    用0,某特殊值,“”替代
  • 使用尽可能短的列
Created with Raphaël 2.2.0 确定合适的大类型 选择具体类型 结束
整数类型

学会使用UNSIGNED属性,正数上限扩大一倍

实数类型

不精确类型,DOUBLE,CPU支持原生浮点运算,计算更
精确类型,DECIMAL,例如财务数据。
在数据量比较大的时候,考虑使用bigint,把所有金额*一百万,然后用bigint存储,可以同时避免浮点运算不精确和DECIMAL计算代价高的问题。

字符串类型

变长字符串,VARCHAR;
节省空间,仅仅使用必要的空间。但再UPDATE的时候,行变长之后,页内没有足够空间存储,InnoDB就需要分裂页,导致额外工作

合适:字符串的长度有的特别长,比平均长度大很多,列的更新很少

定长字符串,CHAR;
适合存储很短的字符串,或者长度基本相同的。对于经常变更的数据,由于是定长的,不容易产生碎片

存储很大数据的字符串类型(不推荐
BLOB,二进制方式存储;没有排序规则或字符集
TEXT,字符串方式存储,有排序规则和字符集

查询使用BLOB和TEXT会使用MyISAM磁盘临时表,效率低,尽量避免。是在避免不了,将BLOB列值转换为字符串,用内存临时表。

使用枚举(ENUM)代替字符串

在存储枚举时,可以让表变小。
MySQL把每个枚举值转换成整数。
适合存储固定信息,性别,产品类型

日期

TIMESTAMP(推荐),4字节,更小,尽量使用它
DATETIME,8字节

范式,反范式

范式,把大表拆成小表

优点

  • 更新快
  • 没有重复数据,修改更少
  • 表小,更好放内存,快

缺点

  • 单独的表,需要更多关联

反范式,避免关联

缓存表和汇总表

//to do

更快地读更慢得写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值