互联网技能图谱 潜水
  • 1发帖数
  • 1主题数
  • 0关注数
  • 0粉丝
开启左侧

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

[复制链接]
互联网技能图谱 发表于 2018-5-5 06:16:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

                               
登录/注册后可看大图

本文为系列文章,紧张介绍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
不在数据库里存图片
上一篇

精彩评论4

藕儿 发表于 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 | 显示全部楼层
转发了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城