當我嘗試從具有外鍵約束的表中刪除某個表時,需要很長時間。 3分鐘後才能完成。如果我不喜歡這樣需要很長的時間:SQL Server 2008 DELETE時間太長
BEGIN TRANSACTION
DELETE FROM [T1]
WHERE
ROLEID = (SELECT ROLEID FROM T2
WHERE
NAME = 'GM')
ROLLBACK
但後立即執行:
BEGIN TRANSACTION
DELETE FROM [T1]
WHERE
ROLEID = (5)
ROLLBACK
顯然,第二個查詢沒有一個子查詢,但是我知道,在子查詢我第一個查詢只返回2行。爲什麼第一個查詢需要這麼長時間?
問自己,多少次的子查詢被執行?提示,這比你想象的要多。 –
如果第一個版本中的子查詢返回兩行,則應該生成一個錯誤。你檢查過嗎?對於多行,你應該使用'in'而不是'='。 –
執行計劃是什麼樣的?這將告訴你什麼是如此之久。如果你可以在這裏發佈它可能有幫助。 – steoleary