Mysql喜欢简单,需要使用数据库的人也同样喜欢简单的原则。
良好的逻辑设计和物理设计是高性能的基石。下面的描述是假设使用的存储引擎是InnoDB或者MyISAM,如果不使用这两种存储引擎,请参考所使用的存储引擎的文档。
1. 整数计算一般使用64位的BIGINT整数类型,即使在32位的环境也是如此。
2. FLOAT和DOUBLE类型是标准的浮点运算进行的近似计算,DECIMAL类型用于存储精确的小数。因为CPU不支持DECIMAL的直接计算,所以DECIMAL需要额外的计算开销,相对而言CPU直接支持原生浮点计算,所以浮点计算明显更快。
3. 尽量只在对小数进行精确计算时才使用DECIMAL,例如存储财务数据,但在数据量比较大的时候,可以考虑使用BIGINT代替DECIMAL,将需要存储的货币单位根据小数的位数乘以相应的倍数即可,这样可以同时避免浮点存储计算不精确和DECIMAL精确计算代价高的问题。
4. VARCHAR比定长类型更节约空间。CHAR适合存储很短的字符串,并且所有值都接近定长,例如CHAR非常适合存储密码的MD5,因为这是一个定长的值。非常短的定长,考虑CHAR。
5. BLOB和TEXT都是为了存储很大的数据而设计的字符串数据类型,分别采用了二进制和字符方式存储,避免在查询条件里使用BLOB和TEXT。
6. DATETIME保存大范围的值,从1001年到9999年,精度为秒。TIMESTAMP,精度也是秒,只能表示1970到2038年。然而TIMESTAMP只使用DATETIME一半的存储空间,并且会根据时区变化,具有特殊的自动更新能力,通常尽可能使用TIMESTAMP。
7. 如果存储UUID,应该移除‘-’符号,或者更好的做法是,用UNHEX()函数转换UUID值为16字节的数字,并且存储在一个BINARY(16)列中。检索时可以通过HEX()函数来格式化为十六进制格式。
8. mysql会在索引中存储NULL值,而Oracle不会。
9. 范式的更新操作比反范式更快,很少或者没有重复数据,缺点是需要关联。反范式是所有数据都在一张表里,可以很好的避免关联,避免了随机IO。完全的范式和反范式都是实验室的东西,在真实世界里很少这样极端,实际应用中经常需要混用。
10. 加快ALTER TABLE操作速度,其中一种是先在不提供服务的机器上执行操作,用新的结构创建一个空表,从旧表中查处所有数据插入新表,然后和提供服务的主库进行切换,另一种叫“影子拷贝”。
网友评论