0

外部キー制限のあるテーブルから a を削除しようとすると、時間がかかります。3 分経過しても完了しません。このようにすると、時間がかかります:

 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 番目のクエリにはサブクエリがありませんが、最初のクエリのサブクエリは 2 行しか返さないことがわかっています。最初のクエリに時間がかかるのはなぜですか?

4

1 に答える 1

1

これが私が思いついたものです:

SELECT ROLEID 
    INTO #RIDS
FROM APPROLES
    WHERE
    NAME IN ( 'GM', 'MINOR', 'USER')

DELETE T1  FROM  [ROLEFUNCS]  T1
      INNER JOIN [#RIDS] T2 ON T2.ROLEID = T1.ROLEID

DELETE T3  FROM  [USERROLES]  T3
      INNER JOIN [#RIDS] T2 ON T2.ROLEID = T3.ROLEID

DELETE T4  FROM  [ROLES]  T4
      INNER JOIN [#RIDS] T2 ON T2.ROLEID = T4.ROLEID

DROP TABLE #RIDS
于 2013-08-29T14:53:30.727 に答える