11

古い IF @@ERROR <> 0 と比較して、SQL Server 2008 で BEGIN TRY..END TRY を使用することのパフォーマンスの向上/トレードオフを見つけた人はいますか? パフォーマンスのペナルティがあるかどうかを知りたいだけです。

4

6 に答える 6

4

データベース ディスク ヒットの問題は同じであるため、顕著なパフォーマンスの問題は発生しないはずです。

于 2009-02-22T08:46:21.257 に答える
3

SQL 2005 以降、TRY CATCH の方法を使用して例外を処理したり、エラーをログに記録したりする必要があります。これはベスト プラクティスと見なされます。これを使用しても、パフォーマンスが大幅に低下することはありません。

BEGIN TRY
    BEGIN TRANSACTION
    -- SQL 
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK
    SELECT
        ERROR_MESSAGE(),
        ERROR_NUMBER() -- etc
END CATCH
于 2009-02-22T08:19:36.750 に答える
2

パフォーマンスは忘れてください。より安全で、より良く、より予測可能です。

ただし、@@ERROR を使用するには、通常、それを正しく管理するために GOTO および/または多くの IF ステートメントが必要になるため、TRY..CATCH が少し向上する可能性があると思います。

于 2009-02-22T16:23:26.430 に答える
1

TRY ... CATCH のパフォーマンスは、エラーがない場合、おそらくもう少し高くなります。一方、エラーが発生する場合は多くの場合、高速になります。

ただし、とにかくパフォーマンスのために厳密にコーディングするべきではありません。また、オーバーヘッドがあったとしてもかなり小さいので、この例では、より安全な構文とパフォーマンスのトレードオフはしません。

さらに、Try ... Catch を使用すると、コードの保守が少し簡単になります。特に、SQL 開発チームが SQL Server をあまり長く使用していない場合は、残念ながら頻繁に発生します。数年後はもっとこうなると思います。

于 2009-02-22T23:18:06.310 に答える