MySQL性能优化:数据类型优化

字段是用于存储数据的单位。 设计字段是设计数据库的第一步,它也会影响系统的性能。
  设计字段时有一个基本原则,保持大小不大,即可以使用字节少的字段代替字节大的字段,目的是节省空间并提高查询效率。
  较小的字段,较小的磁盘空间,内存空间和较小的IO消耗。 对于使用场景,让我们谈谈一些字段类型选择方面的经验,以供参考。
  mysql数据类型

数值类型
  手机号:通常我们在存储手机号的时候,喜欢用 Varchar 类型。
  如果是 11 位的手机号,假设我们用 utf8 的编码,每位字节就需要 3 个字节,那么就需要 11*33=33 个字节来存放;如果我们使用 bigint,只需要 8 个字节就可以存放。
  IP 地址:同上,IP 地址也可以通过 int(4 字节)在存放,可以通过 INET_ATON() 函数把 IP 地址转成数字。这里需要注意溢出的问题,需要用无符号的 int。
  年龄,枚举类型:可以用 tinyint 来存放,它只占用 1 个字节,无符号的 tinyint 可以表示 0-255 的范围,基本够用了。
  字符类型
  Char 和 Varchar 是我们常用的字符类型。char(N) 用来记录固定长度的字符,如果长度不足 N 的,用空格补齐。
  varchar(N) 用来保存可变长度的字符,它会额外增加 1-2 字节来保存字符串的长度。
  Char 和 Varchar 占用的字节数,根据数据库的编码格式不同而不同。Latin1 占用 1 个字节,gbk 占用 2 个字节,utf8 占用 3 个字节。
  用法方面,如果存储的内容是可变长度的,例如:家庭住址,用户描述就可以用 Varchar。
  如果内容是固定长度的,例如:UUID(36 位),或者是 MD5 加密串(32 位),就可以使用 Char 存放。
  时间类型
  Datetime 和 Timestamp 都是可以精确到秒的时间类型,但是 Datetime 占用 8 个字节,而 Timestamp 占用 4 个字节。
  所以在日常建表的时候可以有限选择 Timestamp。不过他们有下面几个小区别,需要注意的。
  区别一:存储数据方式不一样。
  Timestamp 是转化成 utc 时间进行存储,查询时,转化为客户端时间返回的。
  区别二:两者存储时间的范围不一样。
  Timestamp 为’1970-01-01 00:00:01.000000’ 到’2038-01-19 03:14:07.999999’。
  Datetime为’1000-01-01 00:00:00.000000’到’9999-12-31 23:59:59.999999’。
  推荐阅读:mysql性能调优:B+Tree的基本介绍
   如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

猜你喜欢

转载自blog.csdn.net/weixin_49698883/article/details/111473340