高性能MYSQL读书要点摘录_3_Schema与数据类型优化
一 选择优化的数据类型 更小的通常更好:占用更少的磁盘,内存 ,CPU。同时要确保没有低估要存储值的范围。 简单就好:简单的数据类型操作通常需要更少的CPU周期。比如 整形比字符操作的代价更低。 尽量避免NULL:通常情况下最好指定列为NOT NULL,除非真的要存储为NULL。因为如果查询中包含NULL的列,对MYSQL来说更难优化,因为可为NULL的列使得索引,索引统计和值比较都更加复杂。同时 可为NULL的列会使用更多的存储空间,在MYSQL里需要特殊处理。 为列确定合适的数据类型,第一步需要确定合适的大类型:数字,字符串,时间等;第二步,选择具体的类型。很多MYSQL的数据类型可以存储为相同的数据类型,只是存储的长度和范围不一样、允许的精度不同,相同大类型的不同子类型数据有时也有一些特殊的行为和属性。例如datetime和timestamp列都可以存储相同的类型的数据:时间和日期,精确到秒。然而timestamp只使用datetime一半的存储空间,并且会根据时区变化,具有特殊的自动更新能力。另一方面,TIMESTAMP允许的时间范围要小的多,有时候它的特殊能力会成为障碍。MYSQL为了兼容性支持很多别名,例如INTEGER,BOOL,NUMERIC都是整形,只是别名不同。通过show create table 可以查看基本类型,而不是别名。 二 整数类型 整数类型包含