(01)范式与数据类型

1. 数据类型

  • 建表时,数据类型越小越好,因为减少磁盘空间
  • 尽量避免使用null,因为查询的数据中包含null的列,会使得mysql对索引、索引统计、值比较很难优化。

1.1. 整数类型

使用时,尽量满足需求的最小数据类型

  1. tinyint(占1个字节)
  2. smalint(占2个字节)
  3. mediumint(占3个字节)
  4. int(占4个字节)
  5. bigint(占8个字节)

1.2. 字符和字符串类型

1.2.1. varchar

长度

varchar最大长度65535

  • 当varchar(255)时,既长度 <= 255 时,varchar另加1个字节来记录长度
  • 当varchar(256)时,既长度 > 255 时,varchar另加2个字节来记录长度

存储时

存储时只保存需要的字符数,另加1个字节来记录长度(声明列长度不超过255),如果声明列长度超过255,则使用2个字节记录长度。

读取时

数据库取VARCHAR值时,尾部的空格仍然保留

效率

char检索效率、写效率会比varchar高

应用场景

适合长度有波动的数据,如文章/url地址等,有时候短有时候长。适合存储多字节数据,如汉字,特殊字符等

1.2.2. char

长度

char最大长度为255

存储时

char是固定长度字符串,存储时字符数没有达到定义的位数,会在字符尾部用空格补全。比如定义 CHAR(10),那么不论存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充尾部

读取时

数据库库取CHAR值时,尾部的空格会被删除

效率

char检索效率、写效率会比varchar高

应用场景

适合使用在固定长度的数据。如手机号、身份证号、md5加密的数据等

1.2.3. text

以字符串形式存储。可以存储某篇文章,或者存储富文本编辑器中的内容,一般很少用,耗性能。

如果非得使用text存储,且text中的内容很少去查询,可以单独建张副表存储text内容,这样可以减少主表的数据量,增加主表查询速度。

1.2.4. blob

以二进制形式存储。可以存储图片,附件等信息。一般很少用,耗性能。

使用blob存储附件信息,还不如在代码中引入文件服务器,把附件上传到服务器后,新增个字段存储附件的下载地址。

1.3. 时间类型

1.3.1. datetime

占用8字节

精确到毫秒 2021-10-25 23:15:34.9999

1.3.2. timestamp

占用4字节

精确到秒 2021-10-25 23:15:34

这个类型用的比较多

1.3.3. date

占用3字节

精确到日 2021-10-25

2. 合理使用范式和反范式

2.1. 范式

优点

  • 更新快,因为没有多余的表冗余数据
  • 多张表基本没有重复的数据

缺点

  • 查询需要join,因为数据在各个不同表中

2.2. 反范式

优点

  • 查询快,避免过多的表关联
  • 可以设计有效的索引

缺点

  • 冗余数据多,更新时需要修改好几张表数据
posted @ 2021-10-31 22:40  、嘎路的米。  阅读(79)  评论(0)    收藏  举报