既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
原子,列信息不可再分;
第二范式:
行是唯一的,有主键
代理主键:自增长的整数序列
第三范式:
其他列与主键都相关联,其他列之间无关联
本系列文章合集如下:
【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身
目录
引出
1.表的列为什么不能太多?行锁
2.查询优化:大表拆小表、冗余字段存储;
3.实际中数据库设计规范:Innodb存储引擎,utf8mb4字符集. . .
一、表的字段和查询优化问题
问题的引入
1、一张表的列为什么不能太多?
2、开发中如何进行查询优化?
问题的分析
- 当一张表的字段太多,我们在更新列的时候,都会对表加一个行锁,我们的列越多,肯定加大我们我们锁行的概率。当同时更新一行中的不同列时,就会出现锁,导致mysql DML操作出现延迟等待。
- 数据冗余,浪费我们的IO的读写,例如我们的程序取数据的时候,直接select * from 操作的话,就会把所有列的数据取出来,这样比较浪费IO读写。
- 我们数据库中的日志的最小单元是一行记录,每次update记录日志时,都会保存每列的记录,会产生大量的日志
- 数据库冗余设计、大表拆小表、索引等。
二、表的拆分和冗余字段
大表拆小表
关于查询优化,除了从索引等层面回答外,也可以从数据库设计层面根本上提升查询性能,比如大表拆小表、冗余字段存储等。
比如:在我们设计数据库表的时候,面临表字段过多的情况下,我们需要充分考虑业务上的某些需求,将一些不常用的字段和常用的字段分离开来,这样能够让查询常用字段的时候速度得到一定的提升;
做到冷热数据分离,减小表的宽度,带来哪些好处?
- Mysql限制每个表最多存储4096列,并且每一行数据的大小不能超过65535字节;
- 减少磁盘IO,保证热数据的内存缓存命中率(表越宽,把表装载进内存缓冲池时所占用的内存也就越大,也会消耗更多的IO)
- 更有效的利用缓存,避免读入无用的冷数据
- 经常一起使用的列放到一个表中,可以避免更多的关联操作
冗余设计
适当的冗余,增加常用列、列的计算结果
数据库设计的实用原则是:在数据冗余和处理速度之间找到合适的平衡点。
满足范式的表一定是规范化的表,但不一定是最佳的设计。很多情况下会为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。
比如我们有一个product表,
产品名称 | 单价 | 库存量 | 总价值 |
---|---|---|---|
华为手机 | 1999 | 10 | 19990 |
这个表是不满足第三范式的,因为“总价值”可以由“单价”乘以“数量”得到,说明“总价值”是冗余字段。但是,增加“总价值”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。合理的冗余可以分散数据量大的表的并发压力,也可以加快特殊查询的速度。冗余字段也可以有效减少数据库表的连接,提高效率。
举例:这里有一个企业表:
企业ID | 企业名称 | 企业注册地 |
---|---|---|
100 | 东方物流 | 上海 |
合同表:
合同编号 | 合同名称 | 签订企业(外键) | 企业名称 |
---|---|---|---|
WLHT101 | 配实合同 | 100 | 东方物流 |
上例中的合同表的“企业名称”就是冗余存储, 查询合同所属企业时候可以有效减少数据库表连接查询,提高查询效率。
三、实际应用中的数据库设计规范
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新