1

レコードの削除が頻繁に発生する Web アプリケーションの場合、パフォーマンスを考慮すると何が最適でしょうか?

  • レコードに他のテーブルとの関連性があるかどうかを確認し、ユーザーが削除できないようにします。

    例:クエリは次のようになります

     if not exist(select * from table1 where tableX_id = @id) and 
           not exist(select * from table2 where tableX_id = @id)
           ...
        then 
           delete from tableX where id = @id 
    

    また

  • を実行し、制約deleteにより RDBMS にエラーを発生させます。foriegn key

      try{
           Service.DeleteRecord(id)
      }catch{
           Handle the error here
      }
    

    この場合、クエリは単純になります

     delete from TableX where id = @id
    
4

3 に答える 3

3

行が他のテーブルによって参照されているために実際に削除を実行するとエラーが発生する場合にのみ、行が削除されないようにすることが目標である場合は、SQL Server にチェックさせる前に違反をチェックすることをお勧めします。これについていくつかのテストを行ったところ、SQL にエラーをキャッチさせるか、TRY/CATCH を使用するだけでは、中程度の量の失敗が予想される場合でもコストが高くなる可能性があります。適切なインデックスが配置されていれば、チェックを実行するための追加コストはごくわずかです。ただし、チェックを行わないことのコストは、確かに無視できません。

于 2012-06-08T14:20:37.037 に答える
3

データベース トリガー (または ON CASCADE DELETE) を使用して関係を処理します。使用できるツールは RDBMS によって異なります。

于 2012-06-08T14:11:13.367 に答える
1

明らかに、削除を実行し、RDBMS に処理を任せます。自分でチェックを実装すると、RDBMS が実行する余分な操作が発生します。

于 2012-06-08T14:09:38.713 に答える