2

UPDATE複数の列を持つ1つのステートメントを実行する方が効率的ですか

UPDATE myTable 
SET [col1] = [col1] + 1, 
[col2] = [col2] + 1,
[col3] = [col3] + 1,
... 
[colN] = [colN] + 1

または、それぞれ1つの列を持つ複数のUPDATEステートメント?

UPDATE myTable SET [col1] = [col1] + 1
UPDATE myTable SET [col2] = [col2] + 1
UPDATE myTable SET [col3] = [col3] + 1
...
UPDATE myTable SET [colN] = [colN] + 1
4

2 に答える 2

6

これは、特定のデータベースエンジンの実装によって異なる場合がありますが、一般的に、単一の更新の方が連続した更新よりもパフォーマンスが優れていると投票します。DBは、目的のレコードを1回検索し、関連する値を更新して、それを実行するだけで済みます。

計画キャッシュ、インデックス、オプティマイザー、およびその他の要素が手元にあり、その場で物事をよりスマートにすることを考えると、マルチアップデートバージョンは前者のパフォーマンスにほぼ近づく可能性がありますが、私の期待は、最良の状況下でも、前者の方がパフォーマンスが向上します。

于 2012-09-13T18:01:46.967 に答える
1

単一のステートメントがより効率的であることに疑問の余地はありません。すべての更新ステートメントは、レコードをメモリにフェッチし、レコードに対して更新を実行してから、結果を書き出す必要があります。

複数の更新を行うことにより、レコードを複数回読み取り、複数回書き出す必要があります。1つのステートメントで、これを1回実行します。

さらに、データベースは、データの整合性を維持するために、ログファイルへの変更を記録します。変更されるフィールドの数に関係なく、各更新はログに記録されます。

インデックス、メモリよりも大きいテーブル、制約、およびトリガーが関係している場合、状況はさらに悪化します。

2番目のバージョンは、最初のバージョンの約N倍かかる必要があります。ここで、Nは変更される列の数です。

于 2012-09-13T18:13:05.583 に答える