Производительность SQL Query JOIN - PullRequest
3 голосов
/ 28 января 2010

Я хотел знать, что лучше с точки зрения производительности: поставить условия в JOIN? (x JOIN y на x.hi = y.hi AND ....) или, возможно, поместить его под WHERE и оставить JOIN только с условием пересечения.

спасибо, ребята

Ответы [ 4 ]

2 голосов
/ 28 января 2010

Это будет зависеть от механизма оптимизации запросов и от того, как он разбивает запрос на логические операторы запросов.

В MS SQL Server вы можете просматривать план выполнения, но обычно нет никакой разницы, так как оптимизатор видит оба пути как эквивалентные.

1 голос
/ 28 января 2010

Есть похожий вопрос по StackOverflow здесь .

Это в основном только вопрос того, какой синтаксис вы предпочитаете. Насколько я понимаю, оптимизатор SQL должен иметь возможность оценивать их с небольшой разницей в производительности.

0 голосов
/ 28 января 2010

Хорошо, вы не можете использовать *= и =* синтаксис OUTER JOIN в предложении WHERE с SQL Server 2008 R2

Я бы не хотел видеть запрос, смешивающий 2 стиля

0 голосов
/ 28 января 2010

Я не думаю, что любой из них должен иметь значение для производительности (большинство баз данных могут оптимизировать подобные вещи), но они могут иметь значение в результатах, если вы используете левые соединения.

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 вместо объединения превращает левое соединение во внутреннее соединение.

...