表设计阶段:
1.选择合适的数据类型存储数据。使用尽可能少的存储空间
2 尽量使用整形来存储 (利用整数存储ip地址)
3.timestamp 代替datatime 它包含时区而且存储空间更小 4个字节,
4.尽量使用相同的数据类型存储相似或相关的值尤其是要在关联条件中使用的列。
4,适当的范式和反范式设计
5,更快的读更慢的写。 为了提升查询速度经常会建一些额外的索引,增加冗余列,创建缓存表和汇总表。
良好的schea设计原则是普遍适用的,但MySQL有它自己的实现细节要注意,。慨括来说,尽可能保持任何东西小面简单总是好的。MySQL 喜欢简单,需要使用数据库的人应该也同样会喜欢简单的原则:
●尽量避免过度设计,例如会导致极其复杂查询的schema设计,或者有很多列的表设
计(很多的意思是介于有点多和非常多之间)。
使用小而简单的合适数据类型,除非真实数据模型中有确切的需要,否则应该尽可能地避免使用NULL值。
尽量使用相同的数据类型存储相似或相关的值,尤其是要在关联条件中使用的列。注意可变长字符串,其在临时表和排序时可能导致悲观的按最大长度分配内存。尽量使用整型定义标识列。
避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,或者整数的显示宽度。●小心使用ENUM和SET。 虽然它们用起来很方便,但是不要滥用,否则有时候会变成
陷阱。最好避免使用BIT。
范式是好的,但是反范式(大多数情况下意味着重复数据)有时也是必需的,并且能带来好处。第5章我们将看到更多的例子。预先计算、缓存或生成汇总表也可能获得很大的好处。Justin Swanhart的Flexviews工具可以帮助维护汇总表。
最后,ALTER TABLE 是让人痛苦的操作,因为在大部分情况下,它都会锁表并且重建整张表。我们展示了一些特殊的场景可以使用骇客方法;但是对大部分场景,必须使用其他更常规的方法,例如在备机执行ALteER并在完成后把它切换为主库。本书后续章节会有更多关于这方面的内容。 --引自《高性能mysql》