表设计的优化与列类型选择

一.表设计的优化

1.定长与变长分离

比如如 int,占4个字节,char(4) 占4个字符长度,也是定长,即每一单元值占的字节是固定的。核心且常用字段,宜建成定长,放在一张表。而varchar、text、blob,这种变长字段,适合单放一张表,用主键与核心表关联起来。

2.常用字段和不常用字段要分离

需要结合具体的业务来分析,分析字段的查询场景。查询频度低的字段,可单拆出来单放一张表,用主键与核心表关联起来。

3.合理添加冗余字段

数据库范式是对数据表设计的指导,它主要是从数据一致性和节省数据存储空间的角度出发。但适当增加冗余字段可减少关联查询提高查询效率,虽然这样会增加数据存储空间的占用。所以反范式的目的,就是减少表的关联查询。常用办法是增加冗余字段或冗余表,其本质就是用空间换时间。

二.列类型选择的原则

1.性能比较

从性能出发,字段类型选择的优先级为: 整型 > date,time > enum,char>varchar > blob 。整形最快,它比浮点运算快很多,而字符型要考虑字符集的转换与排序时的校对集,速度慢。

2.够用就行,不要慷慨

因为大的字段浪费内存,影响速度,以年龄为例 tinyint unsigned not null ,可以存储255岁,足够. 用int浪费了3个字节。如果以varchar(10) ,varchar(300)存储的内容相同,但在表关联查询时,varchar(300)要花更多内存。

3.尽量避免用NULL

因为NULL不利于索引。NULL要用特殊的字节来标注,在磁盘上占据的索引空间其实更大。

三.主键的选择

主键是特殊的列,可以唯一标识一条数据,经常用来区分、查找和关联数据,非常重要。

1.尽量用整形而不是字符串作主键,因为用字符串做主键性能不如整型。

2.用递增的值,不要用离散的值。离散值会导致文件在磁盘的位置有间隔,浪费空间且不易连续读取。

3.UUID其实也是逐步增长的,可以去掉"-",按照十六进制转换为整数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值