MySQL优化学习 | 数据类型的选择

121 阅读3分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

前言

在建表的时候每个字段都对应着自己的数据类型,那么这些数据类型又是根据什么来决定的,根据什么来设置存储空间大小,想要知道这些,我们先过一下数据库的数据类型有哪些。

数据类型的选择

在确定选择什么数据类型的的时候我们应该明确一点,字段类型的优先级是什么样的?

字段类型优先级

  • 1. 数字类型
  • 2. 日期类型与二进制类型
  • 3. 字符串类型

整数类型

image.png

整数类型也是我们最常用的数据类型之一,在这里我们需要注意的是在具体使用场景下,如果可以确定不存在负数的情况下,可以设置为无符号的整型,这样可以扩大我们的取值范围。采用哪种整型,应当尽量做到在满足业务场景的情况下,去最小的存储空间的类型。

实数类型

image.png

这里一定要注意的是,涉及到计算的字段一定要采用DECIMAL类型,其它类型计算的时候会出现失真的情况,可能造成严重的后果。

VARCHAR类型

VARCHAR变体长度,根据实际内容保存数据

  1. 使用时应该最小的符合需求的长度
  2. VARCHAR(255)以下,使用时额外的一个字节保存长度
  3. VARCHAR(255)以上使用额外2个字节保存长度
  4. VARCHAR(5)VARCHAR(200)虽然都是使用额外的一个字节保存长度,但是他们在内存占用不同,在内存中存储是定长的,可以理解为开辟的内存空间不一样
  5. VARCHAR变更长度时会出现锁表 使用场景
  • 适合存储长度波动大的数据 博客文章,评论,留言等不确定存储长度的数据
  • 字符串很少被更新的场景
  • 适合保存多字节字符

CHAR

属于定长数据

  1. 最大长度255 2, 自动删除末尾空格
  2. 检索效率比VARCHAR

使用场景

  1. 存储长度波动不大的数据 MD5摘要
  2. 存储短字符串
  3. 适合存储经常更新的字符串

DATETIME 日期类型

固定占用8个字节

  1. 与时区无关
  2. 可以存到毫秒
  3. 可保存时间范围大

注意:不要使用字符串存储日期类型,会导致数据库自带的一些函数无法直接使用

TIMESTAMP 时间戳

占用四个字节

  1. 时间范围 1970-01-01 - 2038-01-19
  2. 精确到秒
  3. 采用整形存储
  4. 依赖于时区
  5. 自动更新timestamp列的值

总结

了解了这些日常开发中常用的数据类型,以及他们的优缺点,之后有助于我们在建表时合理的设置字段的数据类型,在设计方面对数据库进行优化,提升性能。