什么情况下外键建立索引?是必须的吗

  朋友问了一个问题:什么情况下外键建立索引?是必须的吗?

  首先,分解问题。拆分后第一个问题:外键什么情况下采用呢? 

要明确外键是否采用是要看业务应用场景,以及开发成本的!

1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展;若是把数据一致性的控制放到事务中,也即让应用服务器承担此部分的压力,而引用服务器一般都是可以做到轻松地水平的伸缩;

2.传统行业:

1>.软件应用的人数有限,换句话说是可控的;
2>.数据库服务器的数据量也一般不会超大,且活跃数据有限;

 

综合上述2句话描述,也即数据库服务器的性能不是问题,所以不用过多考虑性能的问题;另外,使用外键可以降低开发成本,借助数据库产品自身的触发器可以实现表与关联表之间的数据一致性和更新;最后一点,使用外键的方式,还可以做到开发人员和数据库设计人员的分工,可以为程序员承担更多的工作量。

 

 

为何说外键有性能问题(面试常问到):
1.数据库需要维护外键的内部管理;
2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;
3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源(消耗IO,成本高且不易维护。所以互联网行业不推荐,因为有大量的增删更新数据,有外键维护起来很麻烦,具体的可以查一查相关的资料);
4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况;

 

  其次,要不要建立外键的索引呢?参考这篇博文:

https://blog.csdn.net/bisal/article/details/50934304

项目中,我们要求凡是有主子关系的表都要使用外键约束,来保证主子表之间关系的正确,不推荐由应用自己控制这种关系

 转载请注明

作者:五行属鱼 出处: https://www.cnblogs.com/jxl00125

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】

 

-- 未完待续

 

posted @ 2020-04-05 22:50  五行属鱼  阅读(2957)  评论(0编辑  收藏  举报