本文为系列文章,紧张介绍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; 
 不在数据库里存图片 
 
 
字段类军规小结 
 
 用好数值字段类型 
 将字符转化为数字 
 优先使用枚举ENUM/SET 
 避免使用NULL字段 
 少用并拆分TEXT/BLOB 
 不在数据库里存图片 
 上一篇 |