Ich habe eine lächerlich massive Abfrage, die von Business Objects Web Intelligence gegen eine SQL Server-Datenbank für ein Budgetsystem generiert wird. Ein Berichtsentwickler hat diese Abfrage in der GUI erstellt und festgestellt, dass sie niemals abgeschlossen wird. Ich ließ es letzte Nacht laufen und es lief für 7 Stunden, bevor unsere Server für Windows-Updates neu gestartet wurden.
Ich habe einen Blick auf den explain-Plan in sql geworfen und ein paar Warnungen zu einigen 'Nested Loops (Inner Join) Schritten gefunden - zwei dieser Warnungen im dritten bis letzten Schritt. Die Warnung lautet 'Kein Join-Prädikat'.
Die andere Anmerkung, die ich hier habe, ist, dass die Abfrage dies in der where-Klausel enthält:
%Vor%Wenn Sie nur einen Fondscode eingeben, ist alles in Ordnung - wenn Sie also den zweiten Code hinzufügen, wird die Sache kartesianisch (vielleicht würde das ohne Prädikat für Joins passieren).
Gibt es Empfehlungen, wie Sie dies nachverfolgen können? 790 Zeilen wundervoller SQL, um durchzuwaten, mit nichts als Join nach Join.
Könnte der Explain-Plan auf einen bestimmten Bereich zeigen?
Danke für Ihre Hilfe.
Bearbeitungen:
Die Abfrage kann nicht gepostet werden, Sicherheitssache und es ist viel zu groß, um zu verschleiern. Und ich möchte niemanden dazu bringen, es anzuschauen.
Verwenden Sie den Online-SQL-Formatierer, um Klarheit über Ihre SQL-Joins zu erhalten. Teilen Sie dann Ihre Abfrage blockweise auf, um das Problem zu beheben.
Dann können Sie die grafische Ansicht des Plans in mssql server verwenden; Das wird alles erklären.
P.S: Wenn Sie aufgrund eines verschachtelten Loops-Joins mit keinem Join-Prädikat (en) eine schlecht durchzuführende Anfrage haben, ist es nicht unbedingt der Fall, dass Ihnen die Join-Kriterien in Ihrer Anfrage fehlen. Überprüfen Sie Ссылка
Tags und Links sql-server sql-server-2008 tsql