回答:
私の知る限り、両方の構文は同等です。1つ目はSQL標準、2つ目はMySQLの拡張機能です。
したがって、それらは賢明なパフォーマンスとまったく同じになるはずです。
http://dev.mysql.com/doc/refman/5.6/en/insert.html言う:
INSERTは、既存のテーブルに新しい行を挿入します。ステートメントのINSERT ... VALUESおよびINSERT ... SET形式は、明示的に指定された値に基づいて行を挿入します。INSERT ... SELECTフォームは、別のテーブルから選択された行を挿入します。
INSERT INTO table SET
か?これは可能ですか?
拡張機能は、挿入と更新のために同様の構文を許可することを目的としていると思います。Oracleでは、同様の構文トリックは次のとおりです。
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
としますINSERT ... VALUES ...
。この機能では、コードが短く、書き込みが高速で、読みやすさが向上し、VALUES
句を記述するときに列の順序を混同することによるタイプミスがなくなります。私の直感は、ネットでは善が悪を上回っていると私に言っていますが、あなたの判断は異なる場合があります。
構文は同等です(とにかくMySQLのINSERT INTO table SET x=1, y=2
場合)。特に多くの列を挿入する場合は、変更が簡単で、ステートメントのエラーを簡単にキャッチできるため、構文を使用します。10または15以上の列を挿入する必要がある場合(x, y) VALUES (1,2)
、私の意見では、構文を使用して何かを混ぜ合わせるのは本当に簡単です。
異なるSQL標準間の移植性が問題である場合は、おそらくINSERT INTO table (x, y) VALUES (1,2)
推奨されます。
また、1つのクエリに複数のレコードを挿入する場合、INSERT INTO ... SET
構文は機能しませんが、もう1つのクエリは機能します。しかし、ほとんどの実際的なケースでは、レコードのセットをループして挿入を行いますが、1つの大きなクエリを作成して、1つのクエリのテーブルに一連の行を挿入する場合と、行ごとに、パフォーマンスが向上する可能性があります。本当にわからない。
INSERT INTO table SET
は標準ではないようです。はるかにはっきりしているようです。INSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
とにかく、Postgresに移植する場合、問題を回避するために構文を使用する必要があると思います。