一.表设计的优化
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其实也是逐步增长的,可以去掉"-",按照十六进制转换为整数。