举例:
- √ 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)
举例:用无符号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/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
不在数据库里存图片
欢迎光临 创意电子 (https://wxcydz.cc/) | Powered by Discuz! X3.4 |