在关系数据库中,良好的表结构设计有助于性能的提高,对后续的优化作用也极大。同时对后续的优化也意义重大。因此,在表设计阶段,必须要遵循一些规范。下面介绍在mysql中设计表的一些注意问题:

1. 选择优化的数据类型

原则:

  1. 更小的通常更好
    更小的数据类型代表着占用更小的磁盘空间、内存和cpu,处理时需要的cpu时间也更小。但是一定要确定其可能的长度,不要低估这一点。否则到了后面需要添加长度,将会变得很麻烦。

  2. 简单就好
    简单的数据类型需要更小的cpu操作周期。比如整型比字符串操作代价更小,因为字符集和校对规则(排序)使得字符串比整型更加复杂。

  3. 尽量避免NULL
    通常情况下,应该设置成NOT NULL,给出默认值,除非真的需要存储NULL。可为NULL的列需要更多的存储空间,在NULL的列上添加索引也非常麻烦,因为,有可能建立索引的列最好设置成NOT NULL。
    通常,把NULL的列改成NOT NULL 对性能提升很小,所以调优时没必要这么做,除非真的是因为NULL引起。但记住,在计划添加索引的列上,尽量避免设计成可NULL。

1.1 整数类型

整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别对应8,16,14,32,64位存储空间。值的范围-2的N-1次方到2的N-1次方。整数有可选的UNSIGNED属性,表示非负值,选择该属性,可以使整数的上限提高一倍。有符号和无符号使用相同的存储空间,具有相同的性能,根据需要选择。
整数计算通常使用64位的BIGINT。

1.2 实数类型

实数是带有小数部分的数字。通常有:DECIMAL,DOUBLE,FLOAT。
DOUBLE占用8位,FLOAT占用4位。两者用来做浮点近似计算。
在做高精度计算时,使用DECIMAL,比如财务计算。

1.3 字符串类型

VARCHAR 可变长,指定合适的分配长度更好。越短代表性能越好。
CHAR 不可变长。少用。
BINARY,VARBINARY类似上面两种,但是存储的是二进制。单确定不需要字符串比较时,存储为二进制更好,性能更高。
BLOB 存储很大的数据量的字符串类型,二进制存储。
TEXT 大文本。字符存储。

  • 使用枚举代替字符串
    可以存储枚举对应整型或者字符串……

1.4 日期和时间类型