字段选择

字段选择的基本规则

  • 更小的通常更好,同类型字段,尽量选择占用更小的存储空间的,更小的字段通常速度更快,因为占用更少的硬盘空间,内存空间和cpu资源。 若tinyint 满足条件 则不选择int
  • 简单更好,多个数据类型满足的情况下,选择更简单的类型。更简单的类型可以减少cpu的处理时间。 如数字型会比字符串更加有优势
  • 尽量避免null, 如果字段中允许null的话,mysql很难去优化查询,因为所建立的索引会更加复杂

整数型

整数型包含了 tinyint、smallint、mediumint、int 和 bigint,分别是2的8、16、24、32、64位存储空间
signed 和unsigned 使用相同的空间,
int(1)和int(20)是占用一样的空间,并且作用是一样的。只是会在一些mysql的交互工具上显示不同而已。

实数类型

实数型包含float、double、decimal,decimal可以用来存储bigint存储不下的数字
float和double只能提供近似的值,如要存储精确的小数则需要使用decimal来处理
因为decimal占用的空间较大,如数字大小并不大,则可以使用将小数部分乘以百万 转为bigint存储

字符串类型

varchar

varchar是变长字符串,使用1到2位来存储长度,当字符串长度不大于255时使用1位
varchar对性能的提升是因为它是变长的,但当你更新它时需要进行额外的工作
对于varchar 尽量使用符合条件 更短的长度。 长度大时,mysql需要消耗更多的内存去处理,mysql在内部处理时,总是将varchar转为定长字符串。尤其在filesort,临时表和排序时,对性能影响更大
使用场景

  • 当字符串的最大长度远大于字符串的平均长度
  • 字段的更新很少,频繁的更新会导致页分裂
  • 使用复杂的字符集

char

char是定长字符串
使用场景

  • 当你存储很短的字符串时,char是非常好用的,例如存储md5后的值
  • 存储的值经常需要更新

char会自动将字符串结尾的空格去掉,而varchar则不会

text 和 blob

text和blob可以存储大量的字符串和数字,text具有字符集而blob不具有字符集
text有 tinytext、text、mediumtext和longtext
blob有tinyblob、smallblob、blob、mediumblob和longblob

时间类型

datetime类型

yyyy-mm-dd hh:mm:ss
datetime 类型时间和时区无关 占用8个字节存储空间

timestamp 实际上是以int 1970年-2038年

存储1970年1月1日到当前时间的秒数,以yyyy-mm-dd hh:mm:ss显示,占用4个字节
显示依赖于指定时区
在行修改时,可以自动修改timestamp值

date类型 只用3个字节

只存储日期,可以利用日期时间函数进行计算

time类型

只存储时间数据,hh:mm:ss

不要使用字符串来存储时间日期

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容