数据库如何优化数据类型

应该这样定义表,它既能保存所有可能值,同时在磁盘上占用的空间又最小。如果表占用的存储空间越
小,则:
向磁盘写入或读取的数据就越少,查询起来就越快;
在处理查询时,磁盘上的内容会被加载到主内存中。所以,表越小,占用的主存空间就越小;
被索引占用的空间就越小。
如何操作

  1. 如果要存储员工编号,而其可能的最大值为500000,则最佳数据类型为 MEDIUMINT
    UNSIGNED(3个字节)。如果将它存储为4个字节的INT类型,则每一行都浪费了一个字节;
  2. 如果要存储员工名字(first_name),由于其长度不等,可能的最大长度为20个字符,则最好将其
    声明为varchar(20)类型。如果将员工名字存储为char(20)类型,但是只有几个人的名字长为20个
    字符,其余的长度不到10个字符,就会浪费10个字符的空间。
  3. 在声明类型为varchar的列时,应该考虑其长度。尽管类型varchar在磁盘上进行了优化,但这个类
    型的数据被加载到内存时却会占用全部的长度空间。例如,如果将first_name存储在类型
    varchar(255)中,并且其实际长度为10,则在磁盘上它占用10+1(用于存储长度的一个附加字
    节)个字节;但在内存中,它会占用全部的255个字节。
  4. 如果类型为varchar列的长度超过255个字符,则需要用2个字节来存储长度。
  5. 如果不允许存储空值,则应将列声明为NOT NULL。这样做就避免了测试每个值是否为空的开销,
    并且还节省了一些存储空间–每列能节省1位。
  6. 如果字符串的长度是固定的,请存储为char而非varchar类型,因为类型varchar需要一个或两个
    字节来存储字符串的长度。
  7. 如果这些值是固定的,则使用ENUM而非varchar类型。例如,如果要存储可能处于等待状态,或
    者已批准、已拒绝、已部署、尚未部署,以及已失效或被删除的值,则可以使用ENUM类型。它需
    要1或2个字节即可,不像类型char(10)那样占用10个字节。
  8. 优先选择使用整数类型而非字符串类型。
  9. 尝试利用前缀索引。
  10. 尝试利用InnoDB压缩。
    了解更多关于每一种数据类型的存储需求内容,可以参阅 https://dev.mysql.com/doc/refman/8.0/en/
    storage-requirements.html
    了解每一种整数类型的范围,可以参阅https://dev.mysql.com/doc/refman/8.0/en/integer-types.htm

猜你喜欢

转载自blog.csdn.net/wangboyujiayou/article/details/106060064