SQL Server - присоединиться или подзапрос в операторах обновления? - PullRequest
3 голосов
/ 08 февраля 2010

Есть ли причина использовать один из этих операторов UPDATE над другим в отношении производительности?

 UPDATE myTable
 SET    fieldx = 1
 FROM   myTable AS mt
      , myView AS mv
 WHERE  mt.id = mv.id


 UPDATE myTable
 SET    fieldx = 1
 WHERE  id IN ( SELECT id
                     FROM   myView )

Ответы [ 2 ]

5 голосов
/ 08 февраля 2010

Они, вероятно, выйдут с тем же планом выполнения, то есть разницы нет. Для подтверждения просто попробуйте каждый в SSMS с включенной опцией «Включить план выполнения».

На самом деле я бы выбрал:

UPDATE mt
SET mt.fieldx = 1
FROM myTable mt
    JOIN myView mv ON mt.ID = mv.ID

Я предпочитаю этот синтаксис. Тем не менее, он также выйдет с тем же планом выполнения.

Чтобы продемонстрировать это, я запустил тест с каждым вариантом инструкции UPDATE. Как показывают приведенные ниже планы выполнения, все они получились одинаковыми - все выполняются одинаково:
альтернативный текст http://img707.imageshack.us/img707/7801/60422461.png


альтернативный текст http://img683.imageshack.us/img683/7874/41210682.png


альтернативный текст http://img708.imageshack.us/img708/5020/20506532.png

0 голосов
/ 08 февраля 2010

Хотя это не говорит о производительности, мне больше нравится первый пример, чтобы я мог легче его проверить, не меняя структуру кода. Обратите внимание, где и что я положил в комментариях:

UPDATE myTable 
SET    fieldx = 1
--SELECT *
FROM   myTable AS mt 
      , myView AS mv 
WHERE  mt.id = mv.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...