2

SQL でテーブルにデータを挿入するには、次の 4 種類があります。

INSERT INTO TableName (ColumnList) VALUES (ValuesList)

INSERT INTO TableName (ColumnList) SELECT Columns FROM OtherTable

INSERT INTO TableName (ColumnList) EXEC SomeProc

SELECT Columns INTO TableName FROM OtherTable

すべての INSERT ステートメントはトランザクション ログに記録されます。私の質問は、どのような種類の INSERT で最小限のログが記録されるのですか?

パフォーマンスに基づいて、使用する順序は何ですか?

4

1 に答える 1

2

Data Loading Performance Guideには、最小限にログに記録される操作の概要が記載されています。

大量のデータを読み込むシナリオをサポートするために、SQL Server は最小限のログ記録操作を実装しています。トランザクション ログを使用してすべての行の変更を追跡する、完全にログに記録された操作とは異なり、最小限のログに記録された操作では、エクステントの割り当てとメタデータの変更のみが追跡されます。トランザクション ログで追跡される情報ははるかに少ないため、ロギングがボトルネックである場合、最小限のログが記録された操作は、完全にログが記録された操作よりも高速であることがよくあります。さらに、トランザクション ログへの書き込みが少なくなるため、I/O 要件が軽く、はるかに小さいログ ファイルが実行可能になります。

提供されたさまざまな種類の挿入ステートメントのうち、2 つはバルク ロード操作として分類できます。これらは、他の前提条件が満たされている場合に最小限のログに記録される可能性があります

  • INSERT ... SELECT– ローカル クエリまたは任意の OLE DB ソースから SQL Server で処理中の一括読み込みを実行する方法。この方法は、SQL Server 2008 で最小ログ記録操作としてのみ使用できます。
  • SELECT INTO– クエリの結果を含む新しいテーブルを作成する方法。一括読み込みの最適化を利用します。

ただし、これらの一括読み込み操作のいずれかが最小限のログに記録されるためには、満たす必要がある前提条件と条件があることに注意してください...

これらの条件を満たしている場合はinsert、記事で説明されているように一括ログを実行すると、パフォーマンスが向上する可能性があります...

ただし、これが発生するための前提条件は非常に複雑であるため、最小限のログが記録されることを期待して、コマンドを作成/変更する前に記事を読むことをお勧めします。

編集:

明確化の 1 つ...関連するのは、宛先データベースの復旧モデルであることに注意してください。たとえば、完全復旧モデルを持つデータベース内のテーブルから一時テーブルに挿入する場合...一時テーブルはtempdb単純復旧モデルを持つ に存在するため、一時テーブルへの挿入は良い候補です。ログを最小限に抑えるために、一括ログ操作として記述します。

于 2013-02-04T18:15:59.313 に答える