1

SQL Server(2005/2008)

以下の各ステートメントの結果は同じです。一方が他方よりも優れているかどうか誰かが知っていますか?

insert into SOMETABLE 
  values ('FieldOneValue','FieldTwoValue',3,4.55,'10/10/2008 16:42:00.000')

insert into SOMETABLE 
  select 'FieldOneValue','FieldTwoValue',3,4.55,'10/10/2008 16:42:00.000'

insert into SOMETALBE
  Select
    Field1 = 'FieldOneValue',
    Field2 = 'FieldTwoValue',
    Field3 = 3,
    Field4 = 4.55,
    Field5 = '10/10/2008 16:42:00.000'

もちろん、データ型がテーブルと適切に一致すると仮定します...

4

6 に答える 6

8

私は、この質問に基づいて、あなたは時期尚早の最適化のポイントにいると思います。1つのレコードを挿入するだけの場合は、標準の挿入()値()を使用し、SQLServerチームにそれを最もパフォーマンスの高いものにします。

于 2008-10-10T21:56:41.057 に答える
7

これをテストしました。

2 セットのハードウェアで両方のアプローチを 500 万回繰り返しました。

結果: それらは同じように見えます。

これらのクエリ プランは同じであり、パフォーマンスの違いは統計的に有意ではありません。

于 2008-10-10T22:31:30.440 に答える
2

パフォーマンスの違いがあるとすれば、前者が有利になると思いますが、違いがあるとは思えません。

それにもかかわらず、これは、より明確なバージョン (つまり、VALUES を使用) を選択すると、パフォーマンスへの影響が無視できる可能性を上回る可読性と保守性の利点が得られるケースの 1 つです。すべての値を指定している場合は、他の誰かがコードを読んだ場合に備えて、通常の規則に従ってください。一見すると、別のテーブルから INSERT...SELECT を実行しているように見えるかもしれませんが、これは誤解を招く外観です。

于 2008-10-10T22:08:21.047 に答える
1

SQL Server の場合は、このパターンを使用してください

INSERT INTO テーブル名 (フィールド リスト) SELECT (値リスト/列リスト) [ FROM など]

これは、必要な唯一の挿入パターンです。それはすべてを行います。将来のテーブル変更 (オプションの列が追加される場合) からステートメントを保護するために、フィールドリストを指定してください。

INSERT INTO VALUES の使用にはいくつかの細かいニュアンスがありますが、覚える必要がないので覚えていません。

于 2008-10-11T00:59:15.197 に答える
0

模倣しているようです

INSERT into SOMETABLE
(
SELECT * FROM SOMEOTHERTABLE
)
于 2008-10-10T21:52:33.937 に答える
-1

このコメントは無視してください。間違っています。ごめんなさい:(

複数の行を入力しているときに INSERT VALUES() を使用できないことはわかっています。

INSERT INTO Table SELECT 1、2、3、(SELECT 4 FROM Table2 WHERE columnA = columnB)

于 2008-10-10T22:10:16.350 に答える