MySQL调优(二)数据类型优化

1 更小的通常更好

  应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要存储的值的范围,如果无法确认哪个数据类型,就选择你认为不会超过范围的最小类型。例如:一个字段如果能使用SMALLINT存储则没必要使用INT。

2 简单就好

  简单数据类型的操作通常需要更少的CPU周期,例如:

  1. 整型比字符操作代价更低,因为字符集和校对规则使字符比较比整型比较更复杂。
  2. 使用MySQL自建类型而不是字符串来存储日期和时间。
  3. 用整型存储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文件中保存“数字-字符串”映射关系的查找表。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值