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

Beeinflusst die Sql JOIN-Reihenfolge die Leistung?

Die Join-Reihenfolge im SQL2008R2-Server wirkt sich zweifellos auf die Abfrageleistung aus, insbesondere bei Abfragen, bei denen es eine große Anzahl von Tabellen-Joins mit where-Klauseln gibt, die auf mehrere Tabellen angewendet werden.

Obwohl die Join-Reihenfolge bei der Optimierung geändert wird, probiert der Optimierer nicht alle möglichen Join-Reihenfolgen aus. Es hört auf, wenn es eine seiner Meinung nach praktikable Lösung findet, da der Optimierungsakt selbst wertvolle Ressourcen verbraucht.

Wir haben gesehen, dass Abfragen, die sich wie Hunde (1 Minute + Ausführungszeit) verhielten, auf eine Leistung von weniger als einer Sekunde reduziert wurden, indem einfach die Reihenfolge der Join-Ausdrücke geändert wurde. Bitte beachten Sie jedoch, dass dies Abfragen mit 12 bis 20 Joins und where-Klauseln auf mehreren Tabellen sind.

Der Trick besteht darin, Ihre Reihenfolge so festzulegen, dass der Abfrageoptimierer herausfindet, was sinnvoll ist. Sie können Force Order verwenden, aber das kann zu starr sein. Versuchen Sie sicherzustellen, dass Ihre Join-Reihenfolge mit den Tabellen beginnt, in denen die Daten durch where-Klauseln am meisten reduziert werden.