DELETE FROM posts WHERE author_id = 1 LIMIT 100;DELETE FROM posts WHERE author_id = 1 LIMIT 100;...DELETE FROM authors WHERE id = 1;
与数据库外键的 CASCADE 相比,这种方式会带来更大的额外开销,只是我们能降低对数据库性能的瞬时影响 。
总结外键提供的几种在更新和删除时的不同行为都可以帮助我们保证数据库中数据的一致性和引用合法性,但是外键的使用也需要数据库承担额外的开销,在大多数服务都可以水平扩容的今天,高并发场景中使用外键确实会影响服务的吞吐量上限 。在数据库之外手动实现外键的功能是可能的,但是却会带来很多维护上的成本或者需要我们在数据一致性上做出一些妥协 。我们可以从可用性、一致性几个方面分析使用外键、模拟外键以及不使用外键的差异:
- 不使用外键牺牲了数据库中数据的一致性,但是却能够减少数据库的负载;
- 模拟外键将一部分工作移到了数据库之外,我们可能需要放弃一部分一致性以获得更高的可用性,但是为了这部分可用性,我们会付出更多的研发与维护成本,也增加了与数据库之间的网络通信次数;
- 使用外键保证了数据库中数据的一致性,也将全部的计算任务全部交给了数据库;
当我们考虑应不应该在数据库中使用外键时,需要关注的核心我们的数据库承担这部分计算任务后会不会影响系统的可用性,在使用时也不应该一刀切的决定用或者不用外键,应该根据具体的场景做决策,我们在这里介绍了两个使用外键时可能遇到的问题:
- RESTRICT 外键会在更新和删除关系表中的数据时对外键约束的合法性进行检查,保证外键不会引用到不存在的记录;
- CASCADE 外键会在更新和删除关系表中的数据时触发对关联记录的更新和删除,在数据量较大的数据库中可能会有数量级的放大效果;
- 数据库中还有哪些特性是我们在生产环境中不会使用的?为什么?
- 分布式的关系型数据库与 MySQL 等传统数据库有哪些区别?
推荐阅读
- 真香,数据库和缓存一致性的几种实现方式
- MySQL数据库运维的基本命令
- 为什么端口明明开着,nmap却扫描不出来,看老司机怎么指点迷津
- ?甲亢为什么会胖
- 为什么店铺流量有但是没有销量 为什么我开的淘宝店没有流量
- 为什么揉眼睛时会看到奇怪的图案?看完绝对涨知识!
- 人造雪是“假雪”吗?北京冬奥会为什么一定要用人造雪?
- 为什么门窗关好后家里还漏风?学会这么做,不进冷风还隔音
- 淘宝店铺买流量有用吗 为什么我开的淘宝店没有流量
- 满月宝宝为什么总爱哭