什么情況下外鍵建立索引?是必須的嗎


  朋友問了一個問題:什么情況下外鍵建立索引?是必須的嗎?

  首先,分解問題。拆分后第一個問題:外鍵什么情況下采用呢? 

要明確外鍵是否采用是要看業務應用場景,以及開發成本的!

1. 互聯網行業應用不推薦使用外鍵: 用戶量大,並發度高,為此數據庫服務器很容易成為性能瓶頸,尤其受IO能力限制,且不能輕易地水平擴展;若是把數據一致性的控制放到事務中,也即讓應用服務器承擔此部分的壓力,而引用服務器一般都是可以做到輕松地水平的伸縮;

2.傳統行業:

1>.軟件應用的人數有限,換句話說是可控的;
2>.數據庫服務器的數據量也一般不會超大,且活躍數據有限;

 

綜合上述2句話描述,也即數據庫服務器的性能不是問題,所以不用過多考慮性能的問題;另外,使用外鍵可以降低開發成本,借助數據庫產品自身的觸發器可以實現表與關聯表之間的數據一致性和更新;最后一點,使用外鍵的方式,還可以做到開發人員和數據庫設計人員的分工,可以為程序員承擔更多的工作量。

 

 

為何說外鍵有性能問題(面試常問到):
1.數據庫需要維護外鍵的內部管理;
2.外鍵等於把數據的一致性事務實現,全部交給數據庫服務器完成;
3.有了外鍵,當做一些涉及外鍵字段的增,刪,更新操作之后,需要觸發相關操作去檢查,而不得不消耗資源(消耗IO,成本高且不易維護。所以互聯網行業不推薦,因為有大量的增刪更新數據,有外鍵維護起來很麻煩,具體的可以查一查相關的資料);
4.外鍵還會因為需要請求對其他表內部加鎖而容易出現死鎖情況;

 

  其次,要不要建立外鍵的索引呢?參考這篇博文:

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

項目中,我們要求凡是有主子關系的表都要使用外鍵約束,來保證主子表之間關系的正確,不推薦由應用自己控制這種關系

 轉載請注明

作者:五行屬魚 出處: https://www.cnblogs.com/jxl00125

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的 【推薦】

 

-- 未完待續

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM