关于SQL以及索引优化的部分终于学习完了,今天开始进入第二层次的学习,数据库的结构优化,第一部分,选择合适的数据类型。
数据类型的选择,重点在于合适二字。
1. 使用可以存下数据的最小的数据类型
比如,一个时间类型的一个数据,可以使用varchar,可以使用datetime,还可以使用int,如何选择,就看哪一种类型对我们来说是最小的,不言而喻,int类型相对来说是最小的数据类型。
2. 使用简单的数据类型。
int类型要比varchar类型在mysql处理上简单的多,用int类型来存储时间是一个非常好的选择。
3. 尽可能的使用not null来定义字段。
这是因为innodb的一些特性所决定的,对于一些为null的字段,他可能需要一些额外的字段来进行存储,同时也会增加IO和存储的开销,所以在进行表结构设计的时候,尽量把每一个字段设计成not null,并且给出一个默认值。
4. 尽量少的使用一些大的类型,比如:text类型
如果非用不可的情况下,最好把这些字段单独提出来,存在一张附加表之中,一方面增加了主表的查询效率,另一方面在需要的时候对附加表进行这种大数据的查询。
使用int类型来存储时间,利用FROM_UNIXTIME()和UNIX_TIMESTAMP()两个函数来进行转换。
如 FROM_UNIXTIME(1443922330,‘%Y-%m-%d’); 得到一个格式化的:年-月-日
UNIX_TIMESTAMP(‘2015-10-4‘); 得到一个时间戳
使用bigint类型来存储ip地址,利用INET_ATON(),INET_NTOA()两个函数来进行转换
如 INET_ATON(‘127.0.0.1‘) 返回一个整形
INET_NTOA(ip) 返回一个ip地址
存储ip地址除了使用varchar之外,还可以使用bigint类型存储,varchar来存储ip的话,大约需要15个字节,而bigint只需要8个字节,相差了7个字节,不要小看这7个字节,数据量很大的情况下,7个字节能给我们节省很大的存储空间,并且会给IO效率,内存带来很大的节约。能为重要的是,不仅仅在空间上有节约,在ip地址的对比上,也会有好处,因为整形对比要比varchar对比更简单,更高效。