(01)范式与数据类型
1. 数据类型
- 建表时,数据类型越小越好,因为减少磁盘空间
- 尽量避免使用null,因为查询的数据中包含null的列,会使得mysql对索引、索引统计、值比较很难优化。
1.1. 整数类型
使用时,尽量满足需求的最小数据类型
- tinyint(占1个字节)
- smalint(占2个字节)
- mediumint(占3个字节)
- int(占4个字节)
- 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. 反范式
优点
- 查询快,避免过多的表关联
- 可以设计有效的索引
缺点
- 冗余数据多,更新时需要修改好几张表数据

浙公网安备 33010602011771号