mysql数据库设计小技巧

本文介绍了数据库设计中的字段数据类型选择、char与varchar的区别、decimal与float的应用场景、时间类型的存储方式等内容,并提供了数据库设计原则及操作建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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放到附加表;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值