sql >> Databáze >  >> RDS >> Sqlserver

Který SQL dotaz je rychlejší? Filtrujte podle kritérií připojení nebo klauzule Where?

Z hlediska výkonu jsou stejné (a vytvářejí stejné plány)

Logicky byste měli provést operaci, která má stále smysl, pokud nahradíte INNER JOIN s LEFT JOIN .

Ve vašem případě to bude vypadat takto:

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

nebo toto:

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

Předchozí dotaz nevrátí žádné skutečné shody pro a.id jiné než 1 , takže druhá syntaxe (s WHERE ) je logicky konzistentnější.



  1. Jak ručně nakonfigurovat server Glassfish v Eclipse

  2. Zpětné inženýrství datového modelu pomocí Oracle SQL Developer

  3. Zkrat Oracle CASE nefunguje ve skupině

  4. Oracle:jak UPSERT (aktualizovat nebo vložit do tabulky?)