问题
>如何制作外键性价比?
>确保前端的数据完整性不是性价比吗?如果是,那么通过确保前端的数据完整性规则,数据库外键的性能成本和成本之间会有什么区别?
>如果数据库外键确实使数据库变慢,并且应用程序层的完整性规则是更好的方法,那么为什么我们的关系数据库允许外键呢?
>在做了一些研究并阅读关系确实使db变慢之后,我试着想到一个在应用层确保数据完整性的场景是不可能的,但我想不出一个,如果有人可以解释这个,那就太好了.
>如果索引外键提高了性能,那么下面两个中的更好:
1.)确保应用层的数据完整性规则
2.)索引外键
感谢帮助.
解决方法
不过,你同事的论点的核心是正确的,原因如下:
>每次编写包含外键或主键的新记录时,数据库都必须检查是否违反了任何键的约束.键列也已编制索引,因此在添加记录时必须更新索引.
>每次删除包含或引用外键的记录时,都会检查约束,并且删除可能会级联到引用的表.删除记录时,还必须更新索引.
>随着越来越多的表在查询中加入,所有类型的CRUD操作都会显着减慢.表越大,必须连接的记录越多,执行速度越慢.
也就是说,这就是为什么这些论点大多无关紧要的原因:
>索引显着缩短了查询执行时间,尤其是在执行良好的情况下.以一种利用将针对它运行的查询结构的方式索引表非常重要.
>除非您的数据库硬件是简单的,否则强制数据完整性和关系约束所需的操作在后端运行速度可能比前端快得多.如果在客户端应用程序中进行约束检查而在服务器上进行约束检查,则尤其如此.
>基于客户端的数据完整性检查比数据库约束更容易出错.是的,如果您的代码是完美的,它也会运行,但RDBMS软件是专为此类事物而设计的,并且实现起来非常简单.
>基于客户端的数据完整性检查可能导致数据同步问题.想想在不同地点的两个人试图修改一个独特的记录.但是,如果闪电般快速的速度是您最关心的问题,那么最终的数据并发性就足够了.
这些都取决于您的RDBMS和项目的规范,但这是很好的经验法则.一般来说,我会说,除非您的数据库太大以至于执行关系变得非常慢,或者您的模型非常简单以至于关系毫无意义(在这种情况下,您为什么使用RDBMS?),最好启用数据完整性和关系约束.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。