So finden Sie die Quelle von 'Kein Join-Prädikat'

9

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.

    
Sam 12.10.2011, 18:20
quelle

1 Antwort

4

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 Ссылка

    
Bala 12.10.2011 18:36
quelle