0

ALTER TABLEすべてのクエリが 1 つのトランザクション内にある場合、変更を順次適用するのではなく、SQL Server (および SQL Server Compact) を使用して、1 つのテーブルに対して複数のクエリを一度に実行できますか?

コードから DML クエリを生成していて、コードを簡素化したいと考えていますが、パフォーマンスの問題は避けたいと考えています。

たとえば、次のコードの間にパフォーマンス上の違いはありますか。

  BEGIN TRAN
  ALTER TABLE t ADD COLUMN a int
  ALTER TABLE t ADD COLUMN b int
  ALTER TABLE t ADD COLUMN c int
  COMMIT TRAN

そしてこのコード:

  BEGIN TRAN
  ALTER TABLE t ADD COLUMN a int
              , ADD COLUMN b int
              , ADD COLUMN c int
  COMMIT TRAN

PS 念のため、他のリレーショナル データベース エンジンに関する情報も役立ちます。

4

2 に答える 2

1

それらはトランザクション内でシーケンシャルになり、トランザクション外の他のセッションに対してオールオアナッシングになります。パフォーマンスが気になる場合は、テーブルで DDL ステートメントを実行すると、トランザクション中にテーブル全体がロックされることを考慮してください。したがって、トラフィックの多いライブ テーブルではこれを行わないでください。

于 2013-04-04T15:49:21.130 に答える
1

2 番目のケースは、オプティマイザがビジネスを行う機会を与えるため、原則として望ましいものです。特に、データ ディクショナリは 1 回で読み書きされる可能性が高く、テーブルスペースへのすべての変更も 1 回で行われます。しかし、例のようにintを追加するだけで、大きな違いが生じるとは思えません。そして間違いなくエンジン固有です。

于 2013-04-04T16:08:31.810 に答える