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
不在数据库里存图片
上一篇 转发了 转发了 转发了 转发了
页:
[1]