SQL Server ВЫБЕРИТЕ производительность с JOINS - PullRequest
1 голос
/ 24 августа 2009

в SQL Server, я хотел бы знать, есть ли разница в производительности между этим (A) ...

SELECT a.field1, a.field2, a.field3, b.field1
FROM table1 a INNER JOIN table2 b ON a.IDfield = b.IDfield

и это (Б) ...

SELECT a.field1, a.field2, a.field3, b.field1
FROM table1 a, table2 b
WHERE a.IDfield = b.IDfield

Ну, это упрощенный пример. Я работаю с 4-мя объединениями и делаю это, как в примере B. Это плохая практика? Я просто считаю, что лучше писать, лучше читать, но больше не буду делать это, если это хуже с точки зрения производительности. Конечно, я не могу делать левые соединения, правые соединения таким образом, но они не соответствуют тем запросам, которые я делаю. Спасибо.

Ответы [ 4 ]

6 голосов
/ 24 августа 2009

Нет, нет никакой разницы - так как в конце оба запроса будут ВНУТРЕННИМ СОЕДИНЕНИЕМ между таблицами А и В по критериям a.IDfield = b.IDfield.

Но запрос (A) является наиболее предпочтительным способом выражения ваших намерений - всегда используйте этот стиль при написании новых запросов! Этот стиль также описан в стандарте ANSI SQL, поэтому вам, безусловно, лучше использовать этот стиль, когда это возможно.

Марк

1 голос
/ 26 августа 2009

При прочих равных условиях (те же БД, те же индексы, та же статистика, настройки MDOP), с точки зрения производительности нет разницы в двух запросах.

Вы можете увидеть это, выполнив:

SET SHOWPLAN_TEXT ON GO

ВЫБРАТЬ a.field1, a.field2, a.field3, b.field1FROM table1 a INNER JOIN table2 b ON a.IDfield = b.IDfield GO

ВЫБРАТЬ a.field1, a.field2, a.field3, b.field1FROM table1 a, table2 bWHERE a.IDfield = b.IDfield GO

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

В качестве альтернативы вы можете выделить оператор (ы) в Management Studio, щелкнуть правой кнопкой мыши и выбрать «включить фактический план выполнения», чтобы увидеть графическое представление того же самого.

1 голос
/ 26 августа 2009

Я бы ни при каких обстоятельствах не использовал второй синтаксис. Это очень склонно к случайным перекрестным соединениям, когда у вас есть большое количество объединений. Первый также гораздо понятнее для обслуживания. Синтаксис левого и правого соединения, соответствующий этому стилю, не работает корректно в SQl Server и в настоящее время прекращается.

По моему мнению, использовать второй синтаксис - очень плохая практика. И это всего лишь 17 лет, кроме того.

1 голос
/ 24 августа 2009

По своему опыту я бы сказал, что это зависит!

Оптимизатор SQL Server - это загадочная вещь . В идеале нет никакой разницы между двумя синтаксисами; но вы должны использовать ключевое слово JOIN на практике, как сказал Марк.

В зависимости от условий выполнения, SQL Server Optimizer МОЖЕТ сделать второй запрос более быстрым, чем первый или наоборот. Все это зависит. Вы можете использовать план выполнения запроса, чтобы ДЕЙСТВИТЕЛЬНО определить, какой запрос выполняется оптимально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...