1.定义列时,尽量定义为not null类型,可以为空的列索引 内存 cpu 保存都特别麻烦。
2.在查找表时采用整数主键而避免采用基于字符串的值进行关联。
3.为标识列选择合适的数据类型非常重要。
3.1. 当选择标识列的类型时,不仅仅需要考虑【储存类型】 还需要考虑mysql 对
【这种类型怎么执行计算和比较】。
例如:mysql 内部使用整数储存ENUM和SET类型,比较的时候转换为字符串。
3.2.一旦选择一种类型,要确保在所有的关联表中都使用相同的类型,类型之间要精确匹配,包括想UNSIGNED这样的属性。
3.3.如果可能,应该尽量避免使用字符串作为标识列,因为他们很消耗空间【索引空间】,并且比数字类型慢。
要完全避免随机的字符串,--【导致update 和 insert 语句很慢】
3.3.1.因为插入值会随机写到索引的不同位置,导致使得insert 语句更慢。
3.3.2.select 语句会变得很慢,因为逻辑上相邻的行会分布在磁盘和内存的不同位置。
3.3.3随机导致缓存对所有类型的查询语句效果都很差。
4.Mysql限制了每个关联操作最多只能有61张表,如果希望查询执行的快速且并发性好,每个查询最好在12张表以内做关联。
5.范式的优点和缺点
5.1.范式化的更新操作通常比反范式要快
5.2 当数据较好的范式化时,就至于很少的重复数据,所以只需要修改更少的数据。
5.3范式化的表通常更小,可以更好的放入到内存中,所以操作更快。
范式化设计的schema的缺点通常需要关联,稍微复杂一些的查询在符合范式的schema上都可能需要至少一次关联。
6.加快alter table 操作的速度
MYSQL 的ALTER TABLE 操作的性能对于大表来说是个大问题。MYSQL执行大部分修改表结构操作的方法
是用新的结构创建一个空表,从旧表查出所有数据插入新表,然后删除旧表