MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。
不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。
1、尽量避免过度设计,例如会导致极其复杂查询的schema设计,或者有很多列的表设计(很多的意思是介于有点多和非常多之间)。
2、使用小而简单的合适数据类型,除非真实数据模型中有确切的需要,否则应该尽可能地避免使用NULL值。
3、尽量使用相同的数据类型存储相似或相关的值,尤其是要在关联条件中使用的列。注意可变长字符串,其在临时表和排序时可能导致悲观的按最大长度分配内存。
4、尽量使用整型定义标识列。
5、避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,或者整数的显示宽度。
6、小心使用ENUM和SET。虽然它们用起来很方便,但是不要滥用,否则有时候会变成陷阱。最好避免使用BIT。
范式及其优缺点
在范式化的数据库中,每个事实数据会出现并且只出现一次
优点:
范式化的更新操作通常比反范式话要快
当数据较好的范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据
范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快
很少有多余的数据意味着检索列表数据时更少需要 DISTINCT 或者 GROUP BY 语句
缺点:
表需要关联
反范式及其优缺点
在范式化的数据库中,信息是冗余的,可能会存储在多个地方
优点:
因为所有的数据都在一张表中,可以很好地避免关联
可以设计有效的索引
缺点:
表格内的冗余较多,删除数据时候会造成表有些有用的信息丢失
范式是好的,但是反范式(大多数情况下意味着重复数据)有时也是必需的,并且能带来好处。
最后,ALTER TABLE是让人痛苦的操作,因为在大部分情况下,它都会锁表并且重建整张表