Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Welche SQL-Abfrage ist schneller? Nach Join-Kriterien oder Where-Klausel filtern?

In Bezug auf die Leistung sind sie gleich (und produzieren die gleichen Pläne)

Logischerweise sollten Sie die Operation machen, die noch Sinn macht, wenn Sie INNER JOIN ersetzen mit einem LEFT JOIN .

In Ihrem Fall sieht das so aus:

SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
        AND a.ID = 1
LEFT JOIN
        TableB b
ON      x.TableBID = b.ID

oder dies:

SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
LEFT JOIN
        TableB b
ON      b.id = x.TableBID
WHERE   a.id = 1

Die frühere Abfrage gibt keine tatsächlichen Übereinstimmungen für a.id zurück außer 1 , also die letztere Syntax (mit WHERE ) ist logisch konsistenter.