Я хотел бы решить, какой запрос будет быстрее. Я думаю, что СОЕДИНЯЮТСЯ сначала, а затем ГДЕ.Производительность запроса - INNER Присоединиться к фильтрации
Итак, это звучит так:
SELECT *
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.field = t2.field
AND t2.Deleted = 0
INNER JOIN Table2 t3
ON t2.field = t3.field
AND t3.Deleted = 0
WHERE t1.Deleted = 0
бы быть быстрее:
SELECT *
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.field = t2.field
INNER JOIN Table2 t3
ON t2.field = t3.field
WHERE
t1.Deleted = 0 AND
t2.Deleted = 0 AND
t3.Deleted = 0
стыки в первом запросе будет отфильтровать данные ранее, и, следовательно, меньше присоединения.
(я понимаю thi8s может быть иначе, если у вас есть ЛЕВЫЙ соединения)
Посмотрите на планы запросов. Они должны быть одинаковыми. У SQL Server есть хороший оптимизатор запросов, и он определяет лучший способ выполнения объединений и фильтрации в запросе. –
Логически говоря, да, 'JOIN' обрабатывается до' WHERE', но физически говоря, механизм базы данных может выполнять запрос, однако он считает нужным, при условии, что он дает тот же результат. Таким образом, как предлагает @GordonLinoff, планы выполнения могут быть похожими или идентичными. – Brandon
В дополнение к другим комментариям: SQL указывает «что» не «как». – zerkms