Nachdem ich zwei Stunden lang versucht hatte herauszufinden, warum meine (ziemlich einfache) SQL-Abfrage auf ein paar ziemlich leeren Ansichten über eine Minute dauerte, führte ich schließlich ein "Update-Statistiken" auf den betroffenen Ansichten durch und meine Abfrage ging sofort auf ein akzeptableres Ergebnis herunter.
Das gesagt habend, finde ich das Ganze mit den Statistiken ein wenig seltsam, wenn man bedenkt, dass :
- die drei betroffenen Ansichten früher über 10000 Zeilen zurückgaben und die zugrunde liegenden Tabellen gerade abgeschnitten wurden, sodass die Ansichten nur 40, 60 und 60 Zeilen hatten (die zugrunde liegenden Tabellen haben ungefähr die gleiche Anzahl von Zeilen)
- ein select * auf den drei betroffenen Ansichten eine sofortige Operation ist
- die manuelle Verknüpfung (wie in einem Excel-Blatt) wahrscheinlich schneller gewesen wäre als auf den SQL-Server zu warten, um die Verknüpfung zu berechnen !!
- und, last but not least, die gleiche Anfrage auf einem anderen Server mit dem gleichen Schema, über 10000 Zeilen und aktuellen Statistiken praktisch sofort erfolgt.
Ich verstehe, wie schlechte Statistiken zu einem suboptimalen Ausführungsplan führen können. Was ich nicht verstehe, ist, wie diese schlechten Statistiken zu einem so suboptimalen Ausführungsplan führen können.
Ich benutze SQL Server 2008.
Bearbeitung: Leider kann ich hier keine Ausführungspläne oder tatsächlichen Definitionen hinzufügen. Was ich suche ist eher eine Erklärung dafür, "wie schafft es der SQL Server, 1 Minute zu brauchen, um 3 Tabellen mit weniger als hundert Zeilen in jeder zu verknüpfen, selbst mit falschen Statistiken", anstatt "wie kann ich mein spezifisches Problem lösen", was dank des von mir durchgeführten Update der Statistiken bereits erledigt ist.