簡體   English   中英

在SQL Server和DB鎖中使用外鍵

[英]Using foreign key in SQL server and DB locks

我已經使用SQL Server很長時間了,當表之間存在邏輯連接時,我總是使用FK和索引

例:

MyTable1
{
    ID      BIGINT IDENTITY (1, 1)  NOT NULL,
    SomeData    NVARCHAR(255)       NOT NULL,
    MyFK        BIGINT          NULL -- this is a FK to MyTable2.ID
}

MyTable2
{
    ID      BIGINT IDENTITY (1, 1)  NOT NULL,
    SomeData    NVARCHAR(255)       NOT NULL
}

現在要解決的問題是,當我在MyTable1上執行一些批量更新操作以更新MyFK,同時對MyTable2執行插入語句時,我們會一直掛起,直到發生超時或更新完成並釋放了鎖。

據我所知,當插入具有FK的表時,數據庫引擎需要獲得相關表的鎖以驗證FK,這就是問題的根源。

我嘗試解決的問題:

兩種解決方案都導致我陷入僵局和性能不佳。

當我卸下FK時,一切正常,但存在數據損壞的風險。

問題:

  1. 對於在哪里使用FK和在哪里不使用FK,是否有任何建議的規則集?
  2. 除了移除FK可以解決我的問題之外,您能否提供其他解決方案?

萬一asasfrob找到的頁面出現故障,它給出的答案是:

將父表(TableA)上的主鍵定義為非聚集索引。 一旦執行此操作,就不會出現此問題,因為將針對非聚集索引進行查找,並且由於未修改PK列,因此不會處於鎖定狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM