sql >> Databasteknik >  >> RDS >> Sqlserver

Vilken SQL-fråga är snabbare? Filtrera på Join-kriterier eller Where-klausul?

Prestationsmässigt är de samma (och producerar samma planer)

Logiskt sett bör du göra den operation som fortfarande är meningsfull om du ersätter INNER JOIN med en LEFT JOIN .

I just ditt fall kommer detta att se ut så här:

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

eller detta:

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

Den tidigare frågan kommer inte att returnera några faktiska matchningar för a.id annat än 1 , så den senare syntaxen (med WHERE ) är logiskt mer konsekvent.



  1. Migrera från MySQL till PostgreSQL

  2. SQL-fråga för att skapa databas i MySQL

  3. MySQL 8 vanliga tabelluttryck CTE

  4. Hur man benchmarkar PostgreSQL-prestanda