Insert Into: один синтаксис более оптимальный или предпочтительный? - PullRequest
1 голос
/ 11 октября 2008

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'

Разумеется, при условии, что типы данных соответствуют таблице ...

Ответы [ 6 ]

8 голосов
/ 11 октября 2008

Я думаю, исходя из этого вопроса, вы на грани преждевременной оптимизации . я бы придерживался стандартных insert () values ​​(), если вы просто вставляете 1 запись и позволяете команде Sql Server сделать ее максимально производительной.

7 голосов
/ 11 октября 2008

Я только что проверил это.

5 миллионов итераций обоих подходов на двух комплектах оборудования: один сервер с 16 ГБ ОЗУ, один ноутбук с 1 ГБ.

Результат: они кажутся одинаковыми.

Планы запросов для них одинаковы, а разница в производительности статистически незначима.

2 голосов
/ 11 октября 2008

Я подозреваю, что если бы разница в производительности была бы в пользу первой, хотя я сомневаюсь, что она есть.

Тем не менее, это один из тех случаев, когда выбор более четкой версии (т. Е. С помощью VALUES) обеспечивает удобочитаемость и удобство обслуживания, которые перевешивают возможное незначительное влияние на производительность. Если вы указываете все значения, то придерживайтесь обычного соглашения, в случае, если кто-то еще читает код, который на первый взгляд может показывать INSERT ... SELECT из другой таблицы, что вводит в заблуждение.

1 голос
/ 11 октября 2008

Для SQL Server просто используйте этот шаблон

INSERT INTO TableName ( fieldList ) SELECT ( valueList / columnList ) [ ОТ и т. Д. ]

Это единственный шаблон вставки, который вам когда-либо понадобится. Это все делает. Укажите fieldlist , чтобы защитить свое утверждение от будущих изменений таблицы (если добавлены необязательные столбцы).

Существуют некоторые незначительные нюансы использования INSERT INTO VALUES, которые я не помню, потому что не обязан.

0 голосов
/ 11 октября 2008

игнорировать этот комментарий, это неправильно. извините за это: (

Я знаю, что вы не можете использовать INSERT VALUES (), когда вводите более одной строки.

INSERT INTO Table ВЫБРАТЬ 1, 2, 3 (ВЫБРАТЬ 4 ИЗ ТАБЛИЦЫ 2 ГДЕ столбец А = столбец В)

0 голосов
/ 11 октября 2008

Похоже, вы просто подражаете

INSERT into SOMETABLE
(
SELECT * FROM SOMEOTHERTABLE
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...