关于SQL以及索引优化的部分终于学习完了,今天开始进入第二层次的学习,数据库的结构优化,第一部分,选择合适的数据类型。
mysql
数据类型的选择,重点在于合适二字。sql
1. 使用能够存下数据的最小的数据类型数据库
好比,一个时间类型的一个数据,可使用varchar,可使用datetime,还可使用int,如何选择,就看哪种类型对咱们来讲是最小的,不言而喻,int类型相对来讲是最小的数据类型。
函数
2. 使用简单的数据类型。学习
int类型要比varchar类型在mysql处理上简单的多,用int类型来存储时间是一个很是好的选择。大数据
3. 尽量的使用not null来定义字段。优化
这是由于innodb的一些特性所决定的,对于一些为null的字段,他可能须要一些额外的字段来进行存储,同时也会增长IO和存储的开销,因此在进行表结构设计的时候,尽可能把每个字段设计成not null,而且给出一个默认值。
设计
4. 尽可能少的使用一些大的类型,好比:text类型索引
若是非用不可的状况下,最好把这些字段单独提出来,存在一张附加表之中,一方面增长了主表的查询效率,另外一方面在须要的时候对附加表进行这种大数据的查询。
ip
使用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对比更简单,更高效。