小蚂蚁学习mysql性能优化(7)--数据库结构优化--选择合适的数据类型

左心房为你撑大大i 提交于 2019-11-27 19:28:29

    关于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对比更简单,更高效。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!