Я хотел знать, что лучше с точки зрения производительности: поставить условия в JOIN? (x JOIN y on x.hi = y.hi AND ....) или, может быть, поместить его под WHERE, а JOIN оставить только с условием пересечения.
спасибо, ребята
Я хотел знать, что лучше с точки зрения производительности: поставить условия в JOIN? (x JOIN y on x.hi = y.hi AND ....) или, может быть, поместить его под WHERE, а JOIN оставить только с условием пересечения.
спасибо, ребята
Это будет зависеть от механизма оптимизации запросов и от того, как он разбивает запрос на логические операторы запроса.
С MS SQL Server вы можете просмотреть план выполнения, но обычно нет никакой разницы, поскольку оптимизатор увидит оба варианта как эквивалентные.
На StackOverflow есть аналогичный вопрос здесь.
Во многом это вопрос того, какой синтаксис вы предпочитаете. Насколько я понимаю, оптимизатор SQL должен иметь возможность оценивать их с небольшой разницей в производительности.
Я не думаю, что это должно влиять на производительность (большинство баз данных могут оптимизировать такие вещи), но они могут повлиять на результаты, если вы используете левое соединение.
SELECT a.field1
, a.field2
, b.field3
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id
WHERE a.field5 = 'test'
AND b.field3 = 1
SELECT a.field1
, a.field2
, b.field3
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id AND b.field3 = 1
WHERE a.field5 = 'test'
Эти два запроса не возвращают те же результаты, что и первый запрос, поскольку размещение условий в предложении where вместо соединения превращает левое соединение во внутреннее соединение.
Что ж, вы не можете использовать *=
и =*
Синтаксис OUTER JOIN в предложении WHERE в SQL Server 2008 R2
Я бы не хотел, чтобы запрос смешивал 2 стиля
100
других вопросов. - person Quassnoi   schedule 28.01.2010