一、数据类型的选择
简单规则:
1、字符长度设置更小更好;
2、类型越简单越好,越简单使用的CPU越少;比如存储时间字段采用varchar类型与datatime类型对比;
3、尽量避免使用null;因为可为null的列使得索引、索引统计和值比较都更加复杂;
实际细节:
1、整型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT分别使用8,16,24,32,64位存储空
2、字符与字符串类型:
(1)、char长度固定,最大长度255个字节,适合存储长度确定的数据,比如:手机号码;
(2)、varchar可变长度,最大可存储65535个字节,适合用在长度可变的属性,比如:名称;
(3)、text不设长度。
3、日期类型:datetime和timestamp,其中timestamp采用的是int存储,计算操作比较方便;
4、枚举类型:用来存储常量,在mysql在内部会将每个值在列表中的位置保存为整数,并且在表的.frm文件中保存“数 字-字符串”映射关系的查找表
二、主键的选择
代理主键:与业务无关
自然主键:事务的唯一属性
推荐使用代理主键,避免高耦合性
三、存储引擎的选择
功能 MylSAM MEMORY InnoDB Archive
存储限制 256TB RAM 64TB None
支持事务 No No Yes No
支持全文索引 Yes No No No
支持树索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持数据缓存 No N/A Yes No
支持外键 No No Yes No
四、数据冗余
在某些情况下,为了提高性能,我们必须在时间与空间进行取舍。在mysql中,Join仅仅只是为了取得某个小字段的值,而Join到的记录又大,会造成大量不必要的 IO,顾可以对关联较多的字段数据实现多表冗余。