| 本文为系列文章,紧张介绍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)
 
 优先使用ENUM或SET
 √ INT UNSIGNED
√ INET_ATON()
√ INET_NTOA()优先使用ENUM或SET
 
 存储
 
 举例
 √ ENUM占用1字节,转为数值运算
√ SET视节点定,最多占用8字节
√ 比较时需要加‘单引号(即使是数值)
 
 避免使用NULL字段
 √ `sex` enum('F','M') COMMENT '性别'
√ `c1` enum('0','1','2','3') COMMENT '职介审核'避免使用NULL字段
 
 
 举例
 √ 很难举行查询优化
√ NULL列加索引,需要额外空间
√ 含NULL复合索引无效
 
 少用并拆分TEXT/BLOB
 √ `a` char(32) DEFAULT NULL,反例,不应使用NULL做默认值
√ `b` int(10) NOT NULL,反例,不应使用NULL做默认值
√ `c` int(10) NOT NULL DEFAULT 0
 
 TEXT类型处理性能远低于VARCHAR
 
 尽量不消TEXT/BLOB数据类型
 √ 强制生成硬盘暂时表
√ 浪费更多空间
√ VARCHAR(65535)==>64K (注意UTF-8)
 若必须使用则拆分到单独的表
 举例:
 
 CREATE TABLE t1 (不在数据库里存图片id INT NOT NULL AUTO_INCREMENT,
 data text NOT NULL,
 PRIMARY KEY (id)
 ) ENGINE=InnoDB;
 
 
 
 字段类军规小结
 
 
  用好数值字段类型上一篇将字符转化为数字
 优先使用枚举ENUM/SET
 避免使用NULL字段
 少用并拆分TEXT/BLOB
 不在数据库里存图片
 
 |