В чем главное отличие INSERT INTO table VALUES ..
и INSERT INTO table SET
?
Пример:
INSERT INTO table (a, b, c) VALUES (1,2,3)
INSERT INTO table SET a=1, b=2, c=3
А как насчет производительности этих двух?
sql
mysql
performance
Irmantas
источник
источник
INSERT INTO table SET
это не является стандартом. Кажется, намного понятнее. Думаю, мне всеINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
равно придется использовать синтаксис, чтобы уберечь себя от неприятностей, если я перейду на Postgres.Ответы:
Насколько я могу судить, оба синтаксиса эквивалентны. Первый - стандарт SQL, второй - расширение MySQL.
Таким образом, они должны быть точно эквивалентны по производительности.
http://dev.mysql.com/doc/refman/5.6/en/insert.html говорит:
источник
INSERT INTO table SET
? Это вообще возможно?Я думаю, что расширение предназначено, чтобы позволить подобный синтаксис для вставок и обновлений. В Oracle похожая синтаксическая хитрость:
источник
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)
, будет предпочтительнее.И если вы хотите вставить несколько записей в один запрос, не похоже, что
INSERT INTO ... SET
синтаксис сработает, тогда как другой сработает. Но в большинстве практических случаев вы циклически просматриваете набор записей для вставки в любом случае, хотя могут быть случаи, когда, возможно, создается один большой запрос для вставки набора строк в таблицу в одном запросе по сравнению с запросом для каждая строка может иметь улучшение производительности. На самом деле не знаю.источник