古い IF @@ERROR <> 0 と比較して、SQL Server 2008 で BEGIN TRY..END TRY を使用することのパフォーマンスの向上/トレードオフを見つけた人はいますか? パフォーマンスのペナルティがあるかどうかを知りたいだけです。
6 に答える
データベース ディスク ヒットの問題は同じであるため、顕著なパフォーマンスの問題は発生しないはずです。
SQL 2005 以降、TRY CATCH の方法を使用して例外を処理したり、エラーをログに記録したりする必要があります。これはベスト プラクティスと見なされます。これを使用しても、パフォーマンスが大幅に低下することはありません。
BEGIN TRY
BEGIN TRANSACTION
-- SQL
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK
SELECT
ERROR_MESSAGE(),
ERROR_NUMBER() -- etc
END CATCH
パフォーマンスは忘れてください。より安全で、より良く、より予測可能です。
ただし、@@ERROR を使用するには、通常、それを正しく管理するために GOTO および/または多くの IF ステートメントが必要になるため、TRY..CATCH が少し向上する可能性があると思います。
TRY ... CATCH のパフォーマンスは、エラーがない場合、おそらくもう少し高くなります。一方、エラーが発生する場合は多くの場合、高速になります。
ただし、とにかくパフォーマンスのために厳密にコーディングするべきではありません。また、オーバーヘッドがあったとしてもかなり小さいので、この例では、より安全な構文とパフォーマンスのトレードオフはしません。
さらに、Try ... Catch を使用すると、コードの保守が少し簡単になります。特に、SQL 開発チームが SQL Server をあまり長く使用していない場合は、残念ながら頻繁に発生します。数年後はもっとこうなると思います。