MySQL数据类型及其优化(1)

107 阅读2分钟

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

猫和老鼠.jpg

前言:   本篇文章 是我关于MySQL的第22篇文章,水平一般、能力有限。文章写的比较浅,适合新手来看。本篇文章介绍MySQL数据类型及其优化。

影响参数

我们在建表的时候要设计字段的类型,一般来说表字段包含这几个方面。

  • 数据类型
  • 最大长度
  • 是否非空
  • 唯一约束
  • 索引
  • 默认值
  • 备注 数据类型、最大长度、非空、索引这些都是可以影响我们默认的查询速度和存储空间大小的。

在设计数据类型时,最好先确定该字段的最小范围(长度)。

MySQL支持的数据类型很多,选择正确的数据类型对于 获得高性能至关重要。在选择时有个简单的原则有助于做出更好的选择。

长度

设计表时,如果可以确定该字段容量一般直接选择最小的。比如说能用char(N)不用varchar。能用tinyint不用int。这样不仅可以减少磁盘的存储空间,还能增加查询速度,和cpu转化压力等等。

因为.frm文件中,其实字符串类型也是按照整数类型来存储的。所以能用整数类型尽量用整数类型。这样可以减少存储引擎的转化这一步。对排序,范围取值也更快速。

日期尽量用时间戳类型,而少用DataTime类型。因为同理,DateTime类型内部也是用整数来存储的。

是否非空

如果不是有必须要null的场景,一般情况下不要使用null字段。

  • null字段会导致统总数时总计不到。而且会将null值存储到索引中。
  • null值到非null的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。
  • null字段在not ! 等反向选择时时不会被选择到的

我们可以使用空字符串,0等等字段来代替null。

参考文档

《高性能MySQL》