Фильтры соединяются или где положения TSQL

dba.stackexchange https://dba.stackexchange.com/questions/3683

  •  16-10-2019
  •  | 
  •  

Вопрос

Куда мне поставить фильтры на запрос TSQL?

SELECT a.colum FROM A 
JOIN B  ON A.ID =  B.ID AND B.STATUS  = 1

ИЛИ ЖЕ

SELECT a.colum FROM A 
JOIN B  ON A.ID =  B.ID 
WHERE  B.STATUS  = 1

Я ищу проблемы с производительностью или хорошую практику.

Это было полезно?

Решение

  • Нет разницы в производительности
  • Лучшая практика - явное соединение и отдельные фильтры (ваш 2 -й пример)

Примечание:

Это меняется для внешних соединений, потому что вы измените его на внутреннее соединение

Быстрый путь:

SELECT a.colum
FROM
   A 
   LEFT JOIN 
   B  ON A.ID =  B.ID AND B.STATUS  = 1
WHERE
   a.foo = 'bar'

С отдельными фильтрами:

SELECT a.colum
FROM
   A 
   LEFT JOIN 
   (SELECT * FROM B WHERE STATUS  = 1) B ON A.ID =  B.ID
WHERE
   a.foo = 'bar'

Другие советы

Это зависит. Вам нужно посмотреть на план выполнения для ваших конкретных запросов и посмотреть, какой запрос использует более эффективный план. С такими простыми запросами, как ваш пример, планы, вероятно, будут выглядеть довольно похожими. Чем сложнее запрос, тем больше разницы вы увидите в плане.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top