yod*_*oda 3 mysql sql foreign-keys
我遇到过与FK和Web应用程序有关的讨论.基本上有些人说Web应用程序中的FK并不代表真正的改进,甚至可能在某些情况下使应用程序变慢.
你们有什么想法,你的经历是什么?
编辑:请注意,我知道FK的工作和目标,我只是不确定它们是否会对像youtube等网络应用程序的性能产生重大负面影响.
-
InnoDB引擎创始人,Innobase创始人兼首席执行官Heikki Tuuri的引述:
一旦更新了行,InnoDB就会检查外键,不会执行批处理或检查延迟到事务提交外键通常是严重的性能开销,但有助于保持数据的一致性
外键增加了行级锁定的数量,并且可以使它扩展到除了直接更新的表之外的许多表
Dan*_*llo 14
外键将保证表中order_details具有order_id引用表的字段的行orders永远不会具有表order_id中不存在的值orders.
外键不需要具有工作关系数据库,但它们对于避免破坏关系和孤立行(即参照完整性)绝对必不可少.是必需的在数据库级别实施参照完整性的能力Ç在ACID站.
至于您对性能的担忧,一般来说,性能损失(如果有的话)可以忽略不计.我建议你输入你所有的外键约束,如果你有其他你无法解决的真正的性能问题,只能在没有它们的情况下进行实验.
此外,作为附注,虽然与MySQL没有直接关系,但这引用了Microsoft模式和实践:第14章提高SQL Server性能:
当主键和外键在数据库模式中定义为约束时,服务器可以使用该信息来创建最佳执行计划.
Web应用程序与任何其他类型的应用程序没有什么不同.当然,您可以通过省略数据完整性检查获得边际加速,但它不会很多,而且价格太高.
如果没有引用完整性,只要你获得一个悬空的外键(因为一些未经正确测试的代码路径或部分更新失败*),许多依赖于指向某个键的键的查询就会中断.这通常会使您的整个网站崩溃,直到您深入研究数据库并手动删除悬空参考.
(*:除非你正在使用交易.但是让我们面对现实,如果你是那种在没有参照完整性的情况下简化网页应用程序的作者,你也几乎不会使用交易.)
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |