一:表的优化与列类型的选择
1.选择合适的数据类型
数据类型的选择,重点在于合适二字,如何确定选择的数据类型是否合适
列选择原则
使用简单的数据类型,使用可以存下你的数据的最小的数据类型,Int要比varchar类型在mysql处理上简单。
字段类型优先级:整形>date,time>enum(枚举),char>varchar>blob,text
尽可能的使用not null定义字段
尽量少用text类型,非用不可时最好考虑分表
列的特点分析
整形:定长,没有字串集的差异,
比如 tinyint,1,2,3,4 char(1) a,b,c,d,e
从空间上,都是占1个字节,但order by 排序前者快
原因:字符需要考虑字符集与校对集(就是排序规则)
time 定长,运算快,节省空间
enum能以到约束值的目的,内部用整形存储但是与char联查内部需要转换
char 定长
varchar 不定长
text/blob 无法使用内存临时表(排序等操作只能在磁盘进行)
例如:使用int存储日期时间,利用FROM_UNIXTIME(),UNIX_TIMESTAMP()两个函数来进行转换。
使用bigint存储IP地址,利用INET_ATON(),INET_NTOA()来进行转换。
insert into test(ip) values (inet_aton('192.168.0.100'))
select inet_ntoa(ip) from test;
2.定长与变长分离
核心且常用的字段,宜设置为定长保存到一张表,
而varchar,text,blob,这种变长字段适合单独放扩展表,用主键与核心表关联起来。
3.常用字段和不常用字段要分离
结合具体业务,将不常用的查询频度较低的字段拆出来
4.在1对多,需要关联统计的字段添加冗余字段,以减少连表和子查询