Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Które zapytanie SQL jest szybsze? Filtruj według kryteriów przyłączenia lub klauzuli Gdzie?

Pod względem wydajności są takie same (i produkują te same plany)

Logicznie rzecz biorąc, powinieneś wykonać operację, która nadal ma sens, jeśli zastąpisz INNER JOIN z LEFT JOIN .

W twoim przypadku będzie to wyglądać tak:

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

lub to:

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

Poprzednie zapytanie nie zwróci żadnych rzeczywistych dopasowań dla a.id inne niż 1 , więc druga składnia (z WHERE ) jest logicznie bardziej spójny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podsumować pole czasu w SQL Server

  2. Tworzyj, nie psuj, wydajność SQL Server

  3. Korzystanie z transakcji ROLLBACK w SQL Server

  4. Czy istnieje różnica między SQL Server Express (2012) a LocalDB?

  5. Efektywnie konwertuj wiersze na kolumny w serwerze sql