数据库设计中关于数据类型的优化


    在数据库设计中,尤其在建表的时候,我们需要分别对每个字段确定对应的数据类型。那么MySQL支持的数据类型非常多,选择正确的、合理的数据类型对后面的查找速度有直接的影响。不管存储哪种类型的数据,下面有几个简单的设计原则:


1、尽量使用可以正确存储数据的最小数据类型

    更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU,并且在处理时需要的CPU周期也更少。不过需要确保在设计之前,没有低估需要存储的数据值的范围,因为在后期增加数据类型的范围是一个非常痛苦的过程。。。

    比如,当我们确定数据值的范围始终都在0~255之间的整数的话,那么最好使用tinyint unsigned类型,其存储大小为1个字节。

    而,tinyint 的范围是-128~127;

    int的范围是-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字),存储大小为4个字节;

    bigint的范围是 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节;

    smallint unsigned的范围是 –2^15(2^15表示2的15次幂) 到2^15 – 1,即 –32768 到 32767;

    smallint 的范围是 0 到 2^16 – 1,即 0 到 65535,存储的字节是2个字节。


2、尽量使用简单的数据类型

    简单的数据类型的操作通常需要更少的CPU周期。例如:能够使用整型的数据,就不要定义成int,因为字符集和排序规则使得字符比整型更复杂。能够使用MySQL内建的类型,例如data,就不要使用字符串来存储日期和时间;还有,尽量使用整型来存储类似于IP地址的一串数字。


3、尽量避免NULL

    这是因为,在有NULL值的字段上设计索引、索引统计和值比较都更复杂。在可为NULL值的列被索引时,每个索引记录需要一个额外的字节。如果计划在某一列上建立索引,那么就应该尽量避免把这个字段设计成可为NULL的列。如果定义表结构时没有指定列为not null, 默认都是允许为NULL的。



    综上所述,在设计一个表的时候,第一步先确定每个列的合理的大类型:数字、字符串、时间等等。然后,选择具体的类型,这个时候就要用到上面的三条规则。例如datetime和timestamp列都可以存储相同类型的数据,即时间和日期,且都可以精确到秒。然而,timestamp只是用了datetime一半的存储空间,并且会根据时区变化,具有特殊的自动更新能力。不过,timestamp允许的时间范围要小得多,有时候它的特殊能力会成为障碍。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值