摘要:外鍵具有保持?jǐn)?shù)據(jù)完整性和一致性的機(jī)制,對(duì)業(yè)務(wù)處理有著很好的校驗(yàn)作用。但另一方面掏湾,也會(huì)產(chǎn)生性能問題,那么外鍵究竟該用還是不該用 肿嘲?
外鍵是否采用看業(yè)務(wù)應(yīng)用場(chǎng)景融击,以及開發(fā)成本的,大致列下什么時(shí)候適合雳窟,什么時(shí)候不適合使用:
- 互聯(lián)網(wǎng)行業(yè)應(yīng)用不推薦使用外鍵: 用戶量大尊浪,并發(fā)度高,為此數(shù)據(jù)庫服務(wù)器很容易成為性能瓶頸封救,尤其受IO能力限制拇涤,且不能輕易地水平擴(kuò)展;若是把數(shù)據(jù)一致性的控制放到事務(wù)中誉结,也即讓應(yīng)用服務(wù)器承擔(dān)此部分的壓力鹅士,而應(yīng)用服務(wù)器一般都是可以做到輕松地水平的伸縮;
2.傳統(tǒng)行業(yè)
1>.軟件應(yīng)用的人數(shù)有限惩坑,換句話說是可控的掉盅;
2>.數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)量也一般不會(huì)超大也拜,且活躍數(shù)據(jù)有限;
綜合上述2句話描述趾痘,也即數(shù)據(jù)庫服務(wù)器的性能不是問題慢哈,所以不用過多考慮性能的問題;另外永票,使用外鍵可以降低開發(fā)成本卵贱,借助數(shù)據(jù)庫產(chǎn)品自身的觸發(fā)器可以實(shí)現(xiàn)表與關(guān)聯(lián)表之間的數(shù)據(jù)一致性和更新;最后一點(diǎn)侣集,使用外鍵的方式艰赞,還可以做到開發(fā)人員和數(shù)據(jù)庫設(shè)計(jì)人員的分工,可以為程序員承擔(dān)更多的工作量肚吏;
為何說外鍵有性能問題:
1.數(shù)據(jù)庫需要維護(hù)外鍵的內(nèi)部管理方妖;
2.外鍵等于把數(shù)據(jù)的一致性事務(wù)實(shí)現(xiàn),全部交給數(shù)據(jù)庫服務(wù)器完成罚攀;
3.有了外鍵党觅,當(dāng)做一些涉及外鍵字段的增,刪斋泄,更新操作之后杯瞻,需要觸發(fā)相關(guān)操作去檢查,而不得不消耗資源炫掐;
4.外鍵還會(huì)因?yàn)樾枰?qǐng)求對(duì)其他表內(nèi)部加鎖而容易出現(xiàn)死鎖情況魁莉;