高性能MySQL阅读笔记(0)--- 选择优化的数据类型
MySQL 刘宇帅 6年前 阅读量: 1338
MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。不管存储哪种数据类型,下面几个简单的原则都有助于做出更好的选择。
更小的通常更好
一般情况下,尽可能使用可以正确存储数据的最小数据类型。更小的数据类型通常更快,因为他们占用的更少的磁盘、内存和CPU缓存,处理时需要的CPU周期更少。
简单最好
简单的数据类型的操作通常需要更少的CPU周期。例如整数比字符操作代价更低,因为字符集和校对规则使字符串比较比整型更复杂。
两个实际使用中的例子,一个是使用MySQL内置的类型而不是字符串存储时间,另一个是使用整型而不是字符串存储IP。
尽量避免NULL
很多表都包含可为 NULL 的列,即使应用程序不需要保存为 NULL,这是因为 NULL 是列的默认值。通常情况下把列指为 NOT NULL,除非真的需要存储 NULL。
如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化,因为可为 NULL 的列使得索引、索引统计和值得比较都更复杂。可为 NULL 的列需要更多存储空间,在 MySQL 里也需要特殊处理。当可为 NULL 的列被索引时,每个索引记录需要一个额外字节,在 MyISAMy 中甚至还可以导致固定大小的索引变成可变大小的索引。
通常可为 NULL 的列改为 NOT NULL 带来的性能提升非常小,除非确定这会导致问题,否则没有必要在现在的系统中对其做改动。但是如果计划在该列上添加索引,就应该尽量避免设计为可为 NULL 的列。
当然也有例外,比如 InnoDB 使用单独的位存储 NULL 值,所以对于稀疏数据(位 NULL 的行比较多)有很好的空间效率,这点不适合 MyISAM。