作用:保持資料的一致性、完整性
為何說外來鍵有效能問題:
1.資料庫需要維護外來鍵的內部管理;
2.外來鍵等於把資料的一致性事務實現,全部交給資料庫伺服器完成;
3.有了外來鍵,當做一些涉及外來鍵字段的增,刪,更新操作之後,需要觸發相關操作去檢查,(掃瞄變化了的記錄是否合格等)而不得不消耗資源;
4.外來鍵還會因為需要請求對其他表內部加鎖而容易出現死鎖情況;
資料庫外來鍵的使用以及優缺點
摘錄網上討論共同觀點:主鍵和索引是不可少的,不僅可以優化資料檢索速度,開發人員還省不其它的工作,
矛盾焦點:資料庫設計是否需要外來鍵。這裡有兩個問題:乙個是如何保證資料庫資料的完整性和一致性;二是第一條對效能的影響。
正方觀點: 1,由資料庫自身保證資料一致性,完整性,更可靠,因為程式很難100%保證資料的完整性,而用外來鍵即使在資料庫伺服器當機或者出現其他問題的時候,也能夠最大限度的保證資料的一致性和完整性。 eg:資料庫和應用是一對多的關係,a應用會維護他那部分資料的完整性,系統一變大時,增加了b應用,a和b兩個應用也許是不同的開發團隊來做的。他們如何協調保證資料的完整性,而且一年以後如果又增加了c應用呢? 2,有主外來鍵的資料庫設計可以增加er圖的可讀性,這點在資料庫設計時非常重要。 3,外來鍵在一定程度上說明的業務邏輯,會使設計周到具體全面。
反方觀點: 1,可以用觸發器或應用程式保證資料的完整性 2,過分強調或者說使用主鍵/外來鍵會平添開發難度,導致表過多等問題 3,不用外來鍵時資料管理簡單,操作方便,效能高(匯入匯出等操作,在insert, update, delete 資料的時候更快)eg:在海量的資料庫中想都不要去想外來鍵,試想,乙個程式每天要insert數百萬條記錄,當存在外來鍵約束的時候,每次要去掃瞄此記錄是否合格,一般還不止乙個欄位有外來鍵,這樣掃瞄的數量是成級數的增長!我的乙個程式入庫在3個小時做完,如果加上外來鍵,需要28個小時!
結論: 1,在大型系統中(效能要求不高,安全要求高),使用外來鍵;在大型系統中(效能要求高,安全自己控制),不用外來鍵;小系統隨便,最好用外來鍵。2,用外來鍵要適當,不能過分追求 3,不用外來鍵而用程式控制資料一致性和完整性時,應該寫乙個中間層來保證,然後每個應用通過這個層來訪問資料庫。
資料庫外來鍵的使用
在知乎上看到了一位圈友分享的關於外來鍵使用的一些分析 外來鍵是否採用看業務應用場景,以及開發成本的,大致列下什麼時候適合,什麼時候不適合使用 1.網際網路行業應用不推薦使用外來鍵 使用者量大,併發度高,為此資料庫伺服器很容易成為效能瓶頸,尤其受io能力限制,且不能輕易地水平擴充套件 若是把資料一致性...
MySQL資料庫外來鍵使用
5.1 向goods表裡插入任意一條資料 insert into goods name,cate id,brand id,price values 聯想固態硬碟 10,10,1200 5.2 新增外來鍵約束 foreign key alter table goods add foreign key ...
資料庫不使用外來鍵
在公司中,看資料庫表的設計是不用外來鍵的。在初學資料庫的時候,經常用到了外來鍵約束。在論壇中檢視討論的時候,一般人都說很少用外來鍵。因為我們完全可以在業務 程式控制和事務 上處理表之間關係。一般網際網路應用沒必要使用外來鍵,外來鍵會帶來一系列不好的影響 1.資料庫需要維護外來鍵的內部管理 2.外來鍵...