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

LEFT JOIN Deutlich schneller als INNER JOIN

Der linke Join scheint schneller zu sein, da SQL gezwungen ist, zuerst die kleinere Auswahl durchzuführen und dann mit diesem kleineren Satz von Datensätzen zu verknüpfen. Aus irgendeinem Grund will der Optimierer dies natürlich nicht tun.

3 Möglichkeiten, um die Joins in der richtigen Reihenfolge zu erzwingen:

  1. Wählen Sie die erste Teilmenge von Daten in einer temporären Tabelle (oder Tabellenvariable) aus und verknüpfen Sie sie dann
  2. Verwenden Sie Linksverknüpfungen (und denken Sie daran, dass dies unterschiedliche Daten zurückgeben könnte, da es sich um eine Linksverknüpfung und nicht um eine Innenverknüpfung handelt)
  3. verwenden Sie das Schlüsselwort FORCE ORDER. Beachten Sie, dass der Abfrageplan möglicherweise nicht korrekt ist, wenn sich Tabellengrößen oder Schemas ändern (siehe https://dba.stackexchange.com/questions/45388/forcing-join-order )