Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Quale query SQL è più veloce? Filtra sui criteri di adesione o sulla clausola Where?

Dal punto di vista delle prestazioni, sono gli stessi (e producono gli stessi piani)

Logicamente, dovresti eseguire l'operazione che ha ancora senso se sostituisci INNER JOIN con un LEFT JOIN .

Nel tuo caso sarà simile a questo:

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

o questo:

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

La precedente query non restituirà alcuna corrispondenza effettiva per a.id diverso da 1 , quindi quest'ultima sintassi (con WHERE ) è logicamente più coerente.