mysql数据库设计小技巧

    xiaoxiao2022-06-22  23

    1 字段数据类型选择

    1.1 各数据类型占用的字节数

    TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < =X < = 53 FLOAT 4 个字节 DOUBLE 8 个字节 DOUBLE PRECISION 8 个字节 REAL 8 个字节 DECIMAL(M,D) M字节(D+2 , 如果M <D)  NUMERIC(M,D) M字节(D+2 , 如果M <D) 

    日期和时间类型 列类型 需要的存储量  DATE 3 个字节 DATETIME 8 个字节 TIMESTAMP 4 个字节 TIME 3 个字节 YEAR 1 字节

    串类型 列类型 需要的存储量 

    CHAR(M) M字节,1 <= M <=255  VARCHAR(M) L+1 字节, 在此L <= M和1 <= M<= 255  TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8 BLOB, TEXT L+2 字节, 在此L< 2 ^ 16 MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24 LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32 ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535) SET('value1','value2',...) 1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员)

    其中,需要特别注意的是由于timestamp类型占用四个字节,因此只能存储到2037年

    1.2 char和varchar抉择原则

    原则一:数据长度差不多一致选择char,如身份证号,否则varchar;

    原则二:数据长度最大不超过50bytes,选择char(如果列很少用,那么基于空间和io考虑,则应该采用varchar);

    原则三:一般不宜定义超过50bytes的char类型字段;

    1.3 decimal和float抉择原则

    原则一:decimal存储精确数据;

    原则二:float存储非精确数据(存储空间开销小);

    1.4 时间类型存储

    1.4.1 int存储

    优点:只有四个字节,字段长度比datetime小;

    缺点:由于只有四个字节,只能储存到2038年;

    2 数据库设计的其他原则

    2.1 尽量避免使用外键

    原因:

    一、降低数据导入的效率;

    二、增加维护成本;

    三、虽然不建议使用外键,但是相关联的列一定要加上索引;

    2.2 避免使用触发器

    原因:

    一、降低数据导入的效率;

    二、可能出现意想不到的数据异常;

    三、使业务逻辑变得复杂

    2.3 严禁使用预留字段

    原因:

    一、数据类型不明确;

    二、不知道需要存储的内容,名称不明确,使用时需要更名;

    三、第二点的更名造成的维护成本和添加字段成本相等。

    2.4 反范式化设计

    原因:使用空间换时间,如数据冗余

    2.5 建立索引的原则

    原则一:出现在where从句,group by从句、order by从句的列;

    原则二:可选择性高的列要放在索引前面;

    原则三:索引中不要包括太长的数据;

    3 数据中适合的操作

    3.1 批量操作优于逐条操作;

    3.2 禁用select * 这样的查询;

    3.3 控制使用用户自定义函数;

    3.4 不要使用数据库中的全文索引;

    4 垂直拆分

    原则一:经常查询的列放在一起;

    原则二:text、blob放到附加表;

    转载请注明原文地址: https://ju.6miu.com/read-1122886.html

    最新回复(0)