4.1.1 整数类型
有两种类型的数字:整数和实数。
TINYINT 8位
SMALLINT 16位
MEDIUMINT 24位
INT 32位
BIGINT 64位
注意: int(11) 不会限制值得合法范围,只是规定了mySQL的交互工具显示字符个数,对于存储和计算来说, INT(1) INT(20)是相同的。
4.1.2 实数类型
实数是带有小数部分的数字。
4.1.3 字符串类型
varchar:可变长字符串,比定长类型更节省空间,因为它仅使用必要的空间。
char: 定长,char非常适合存储密码的md5值,因为是一个定长值,不容器产生碎片,对于非常短的值,CHAR比VARCHAR在存储空间上也更有效率。
例如:CHAR(1)存储Y和N的值,只需要一个字节,VARCHAR(1)需要两个字节。
4.1.4 日期和时间类型
TIMESTAMP 比 DATETIME范围小,只能1970-2038.
除特殊情况,通常尽量使用TIMESTAMP,因为它比DATETIME空间效率更高。
4.1.5 位数据类型
BIT
SET
4.1.6 选择标识符
4.1.7 特殊类型数据
4.2 MySQL schema设计中的陷阱
太多的列
太多的关联
全能的枚举
变相的枚举
4.3 范式和反范式
4.3.1 范式的优点和缺点
优点:
更新比反范式快
很少或者没有重复数据
表通常更小
更少需要DISTINCT或者GROUP BY
缺点
需要关联
4.3.2 反范式的优点和缺点
优点:
避免关联
数据比内存大时,比关联要快得多,因为避免了随机 I/O.
单表更有效的使用索引策略
缺点:
更新起来比较麻烦,数据不一致。
备注:权标扫描基础上是顺序I/O,但不全是,跟引擎的实现有关。
4.3.3 混用范式化和反范式化
4.4 缓存表和汇总表
4.4.1 物化视图
Flexviews
4.4.2 计数器表
4.5 加快 ALTER TABLE 操作的速度
4.5.1 只修改 .frm 文件
4.5.2 快速创建MyISAM索引