MySQL调优数据类型优化
Posted EileenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL调优数据类型优化相关的知识,希望对你有一定的参考价值。
文章目录
1 更小的通常更好
应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要存储的值的范围,如果无法确认哪个数据类型,就选择你认为不会超过范围的最小类型。例如:一个字段如果能使用SMALLINT存储则没必要使用INT。
2 简单就好
简单数据类型的操作通常需要更少的CPU周期,例如:
- 整型比字符操作代价更低,因为字符集和校对规则使字符比较比整型比较更复杂。
- 使用mysql自建类型而不是字符串来存储日期和时间。
- 用整型存储IP地址(使用inet_aton和inet_ntoa进行转换)。
3 尽量避免null
如果查询中包含可为NULL的列,对mysql来说很难优化,因为可为null的列使得索引查找、索引统计和值比较都更加复杂,应该尽量避免设计成可为null的列。
4 具体细节
4.1 整数类型
可以使用的几种整数类型:TINYINT、SMALLINT
、MEDIUMINT、INT、BIGINT分别使用8、16、24、32、64位存储空间,应尽量使用满足需求的最小数据类型。
4.2 字符和字符串
4.2.1 char固定长度的字符串
char的最大长度为255,会自动删除末尾的空格,检索效率、写效率会比varchar高,以空间换时间。一般用以存储长度波动不大的数据,如md5摘要。
4.2.2 varchar根据实际内容长度保存数据
varchar可使用最小的符合需求的长度,长度小于等于255时用额外一个字节保存长度,长度大于255时用额外两个字节保存长度。一般用以字符串很少更新的场景,因为每次更新后都会重算并使用额外存储空间保存长度。
4.3 BLOB和TEXT类型
MySQL把每个BLOB和TEXT值当作一个独立的对象处理。两者都是为了存储大数据而设计的字符串类型,分别采用二进制和字符方式存储。
4.4 日期类型
4.4.1 datetime
datetime占用8个字节,可保存到毫秒,并且可保存时间范围较大。
4.4.2 timestamp
timestamp占用4个字节,使用整形来存储数据。其精度可精确到秒,时间范围从1970-01-01到2038-01-19,是开发中最常使用的日期类型。
4.4.3 date
date类型只占用3个字节,可用于保存1000-01-01到9999-12-31之间的日期。
4.5 枚举类型
有时可以使用枚举类代替常用的字符串类型,MySQL存储枚举类型会非常紧凑,会根据列表值的数据压缩到一个或两个字节中,MySQL在内部会将每个值在列表中的位置保存为整数,并且在表的.frm文件中保存“数字-字符串”映射关系的查找表。
以上是关于MySQL调优数据类型优化的主要内容,如果未能解决你的问题,请参考以下文章