互联网技能图谱 发表于 2018-5-5 06:16:35

MySQL数据库开发的三十六条军规——字段类军规(6条)

https://p9.pstatp.com/large/pgc-image/15254718745899286552f44
本文为系列文章,紧张介绍36条来自一线的MySQL数据库开发实战经验,每一条经验背后都是血淋林的教训,若有一条让你有所受益,本文的目标就达到了。
本文将36条军规做了如下分类:
一.核心军规(5)
二.字段类军规(6)
三.索引类军规(5)
四.SQL类军规(15)
五.约定类军规(5)
为了避免收藏不看,让大家更有耐心看下去,印象更深刻些,小编将按以上分类分5次分别发布这些内容,本文是其中的第2篇,介绍字段类军规:
用好数值字段类型

三类数值类型:

[*]√ TINYINT(1Byte)
[*]√ SMALLINT(2B)
[*]√ MEDIUMINT(3B)
[*]√ INT(4B)、 BIGINT(8B)
[*]√ FLOAT(4B)、 DOUBLE(8B)
[*]√ DECIMAL(M,D)
举例:

[*]√ INT(1) VS INT(11)
[*]√ BIGINT AUTO_INCREMENT
[*]√ DECIMAL(18,0)
将字符转化为数字

数字型VS字符串型索引

[*]√ 更高效
[*]√ 查询更快
[*]√ 占用空间更小
举例:用无符号INT存储IP更好,而非CHAR(15)

[*]√ INT UNSIGNED
[*]√ INET_ATON()
[*]√ INET_NTOA()优先使用ENUM或SET
优先使用ENUM或SET


[*]√ 字符串
[*]√ 大概值已知且有限
存储

[*]√ ENUM占用1字节,转为数值运算
[*]√ SET视节点定,最多占用8字节
[*]√ 比较时需要加‘单引号(即使是数值)
举例

[*]√ `sex` enum('F','M') COMMENT '性别'
[*]√ `c1` enum('0','1','2','3') COMMENT '职介审核'避免使用NULL字段
避免使用NULL字段


[*]√ 很难举行查询优化
[*]√ NULL列加索引,需要额外空间
[*]√ 含NULL复合索引无效
举例

[*]√ `a` char(32) DEFAULT NULL,反例,不应使用NULL做默认值
[*]√ `b` int(10) NOT NULL,反例,不应使用NULL做默认值
[*]√ `c` int(10) NOT NULL DEFAULT 0
少用并拆分TEXT/BLOB

TEXT类型处理性能远低于VARCHAR

[*]√ 强制生成硬盘暂时表
[*]√ 浪费更多空间
[*]√ VARCHAR(65535)==>64K (注意UTF-8)
尽量不消TEXT/BLOB数据类型
若必须使用则拆分到单独的表
举例:
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
data text NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
不在数据库里存图片

https://p9.pstatp.com/large/pgc-image/1525471575394c3bf085233
字段类军规小结

用好数值字段类型
将字符转化为数字
优先使用枚举ENUM/SET
避免使用NULL字段
少用并拆分TEXT/BLOB
不在数据库里存图片
上一篇

藕儿 发表于 2018-6-4 10:11:57

转发了

乐天64677257 发表于 2018-5-6 23:42:31

转发了

小刚_Andy 发表于 2018-5-5 11:25:26

转发了

梦想家3723 发表于 2018-5-5 08:48:37

转发了
页: [1]
查看完整版本: MySQL数据库开发的三十六条军规——字段类军规(6条)