2

周知のとおり、CTE は SQL Server 2005 で導入され、群衆は熱狂しました。

テーブルに大量の静的データを挿入する場合があります。私が知りたいのは、次のうちどれがより高速で、他にどのような要因に注意する必要があるかです。

INSERT INTO MyTable (MyField) VALUES ('Hello')
INSERT INTO MyTable (MyField) VALUES ('World')

また

WITH MyCTE(Field1) AS (SELECT 'Hello' UNION SELECT 'World')
INSERT INTO MyTable (MyField) SELECT Field1 FROM MyCTE

答えは、どのトリガーが存在するかなどに依存するのではないかと不快に感じていますMyTable...

(また、BULK INSERTCSV を ing したり、他の方法をいくつでも使用したりすることは、静的データを挿入するための客観的に高速で優れた方法であることを知っていて気にしません。特に、CTE と複数の挿入で注意する必要がある懸念を知りたいです。 )

4

1 に答える 1

2

使用している SQL Server のバージョン (2005 または 2008) は不明ですが、使用しているバージョンに関係なく、この場合、複数の挿入に CTE を使用することに大きな利点はありません。CTE は非常に多くの状況で非常に優れていますが、これはその 1 つではありません。

INSERTしたがって、基本的には、いくつかのステートメントを使用することをお勧めします。

SQL Server 2008 では、複数の値のタプルを指定するだけでこれらを簡素化できました。

INSERT INTO MyTable (MyField) 
VALUES ('Hello'), ('World'), ('and outer space')

いつものように、テーブル構造、インデックスとトリガーの存在 (または不在) は、実際に INSERT 速度に大きな影響を与えます。大量のデータをロードする必要がある場合は、INSERT の間はこれらの制約とトリガーをオフにしてからオンに戻す方が簡単な場合がありますが、繰り返しになりますが、実際にそうであるかどうかを明確に示す方法はありません特定の状況であろうとなかろうと、重要な役割を果たしていることについて私たちが知らない変数が多すぎます。測って、比べて、自分で判断してください!

于 2009-11-30T06:32:35.920 に答える