总结一下这些年在项目中一些设计技巧,有些在前面的章节已经提到过。
一、属性定义
1.1、数据类型
(1)整型还是字符型
在可以为整型的情况下尽量使用整型,通常情况下整型占的空间小,可以提高I/O及缓存命中率。
(2)定长还是变长字符型
定长的好处(也就是变长的坏处):
a)定长字段不需要额外维护和计算行偏移量,当然这个成本不是很大,可以忽略;
b)如果用变长的话,很有可能会由于更新行数据而带来页拆分,这个成本是很大的;
变长的好处:
节省存储空间,可以提高I/O及缓存命中率;
那究竟使用定长还是变长呢?规则就是:同一属性列的数据长度有明显差异、且更新不太频繁的情况,使用变长字符,否则建议使用定长字符,比如:订单号、MAC地址,这类长度固定的属性应该毫不犹豫地使用定长。
(3)数据类型的长度
业务的发展总是会出乎人为意料的,所以不要太小气,在长度不是太大的情况下,大胆去放大数据类型的长度,比如:把smallint(占2字节)改为int(占4字节)。
(4)数据类型一致性
避免出现:同一个字段,在A表中为整型,在B表中为字符型,保证数据类型的一致。
1.2、NULL
建议将所有列都设为not null,原因如下:
(1)记录中存在允许为null的列时,每次都在读取该行时都需要去检查null列是否有值;
(2)索引中不会记录null值,因为这个值根本不存在,所有无论单表还是多表的查询中,is null/is not null无法使用索引,关于索引的使用可参见《SQL Server 查询优化(3)_索引的设计与使用》;
(