Wie verwende ich Explain Plan, um Abfragen zu optimieren?
Ich wurden beauftragt zu optimieren, einige sql-Abfragen bei der Arbeit. Alles, was ich gefunden habe, Punkte zu verwenden, Erklären Plan, um Problembereiche zu identifizieren. Das problem habe ich nicht herausfinden können, genau das, was erklären plan ist es, mir zu sagen. Sie bekommen die Kosten, Kardinalität und bytes.
Was diese zeigen und wie sollte ich mit diesem als Leitfaden. Sind niedrige zahlen besser? Hoher besser? Würde jede Eingabe sehr geschätzt werden.
Oder wenn Sie einen besseren Weg, um darüber zu gehen eine Abfrage optimieren, wäre ich interessiert.
InformationsquelleAutor der Frage Jacob Schoen | 2008-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekommen Sie mehr als das eigentlich je nachdem, was Sie tun. Überprüfen Sie heraus dieses erklären Sie planen Seite. Ich nehme an, ein wenig hier, dass Sie Oracle verwenden und wissen, wie Sie das Skript ausführen, um die Anzeige der plan-Ausgabe. Was kann wichtiger sein, beginnen Sie mit der Suche auf der linken Seite für die Verwendung eines bestimmten index oder nicht und wie dieser index verwendet wird. Sie sollte die Dinge sehen wie "(Full)", "(By Index Rowid)", etc, wenn Sie tun, verbindet. Die Kosten wäre die nächste Sache zu betrachten ist, die mit niedrigeren Kosten besser und Sie werden feststellen, dass, wenn Sie tun, eine Verknüpfung, die nicht über einen index erhalten Sie möglicherweise eine sehr große Kosten. Möglicherweise möchten Sie auch zu Lesen details über die explain plan-Spalten.
InformationsquelleAutor der Antwort carson
Ich auch davon ausgegangen, dass Sie Oracle. Und ich auch empfehlen, dass Sie überprüfen die erklären, planen, web-Seite, für den Anfang. Es gibt eine Menge an Optimierung, aber es kann gelernt werden.
Ein paar Tipps Folgen:
Erste, wenn jemand Aufgaben, die Sie zu optimieren, sind Sie fast immer auf der Suche für eine akzeptable Leistung eher als ultimative Leistung. Wenn Sie reduzieren können, die eine Abfrage läuft die Zeit von 3 Minuten auf 3 Sekunden, nicht Schwitzen reduziert es bis zu 2 Sekunden, bis Sie gefragt werden.
Zweite, tun Sie eine schnelle überprüfung, um sicherzustellen, dass die Abfragen, die Sie optimieren sind logisch richtig. Es klingt absurd, aber ich kann Ihnen nicht sagen, die Anzahl der Male, die ich habe um Rat gefragt, die auf eine langsam ausgeführte Abfrage, nur um herauszufinden, dass es manchmal falsche Antworten! Und wie es sich herausstellt, Debuggen Sie die Abfrage oft stellte sich heraus, es zu beschleunigen als auch.
Suchen Sie insbesondere den Satz "kartesischen Join" in den explain-plan. Wenn Sie es sehen, dort sind die Chancen sehr gut, dass Sie gefunden haben, eine unbeabsichtigte kartesischen beitreten. Das übliche Muster für eine ungewollte kartesische Verknüpfung ist, dass die FROM-Klausel listet die Tabellen durch Komma getrennt, und die join-Bedingungen in der WHERE-Klausel. Außer, dass eine der join-Bedingungen fehlt, so dass Oracle hat keine andere Wahl, sondern führen ein Kartesisches beitreten. Mit großen Tabellen, ist dies eine performance-Katastrophe.
Ist es möglich, eine kartesische Verknüpfung in den explain-plan, wo die Abfrage ist logisch richtig, aber ich Verbinde dies mit älteren Versionen von Oracle.
Sehen Sie auch für die ungenutzten zusammengesetzten index. Wenn die erste Spalte eines zusammengesetzten index ist nicht in der query, Oracle kann den index verwenden zu ineffizient oder gar nicht. Lassen Sie mich ein Beispiel geben:
Abfrage:
(DBMS wurde nicht von Oracle, so dass die syntax anders war, und ich vergessen habe die ursprüngliche syntax).
Einen kurzen Blick auf die Indizes zeigt ein index auf die Kunden mit den Spalten
(Land, Bundesland, Postleitzahl), in dieser Reihenfolge. Ich habe die Abfrage zu Lesen
und jetzt lief es in etwa 6 Sekunden lang, anstatt über 6 Minuten, da der optimizer in der Lage, um den index benutzen zu Ihrem Vorteil. Ich fragte den Anwendungs-Programmierer, warum Sie versäumt hatte, das Land von den Kriterien, und dies war Ihre Antwort: Sie wussten, dass alle Adressen hatte Land gleich 'USA', so dass Sie dachte, Sie könnte beschleunigen die Abfrage, indem Sie zu verlassen, das Kriterium aus!
Leider Optimierung von Datenbank-retrieval ist nicht wirklich dasselbe wie das rasieren Mikrosekunden aus der Rechenzeit. Es umfasst das Verständnis der Datenbank-design, vor allem Indizes und zumindest einen überblick darüber, wie der Optimierer macht seinen job.
Erhalten Sie in der Regel bessere Ergebnisse aus den optimizer, wenn Sie lernen, zu kooperieren anstatt zu versuchen, zu überlisten.
Glück kommen bis zu Geschwindigkeit, mit der Optimierung!
InformationsquelleAutor der Antwort Walter Mitty
Hast du die fuzzy-Ende der Lutscher.
Es gibt absolut keine Möglichkeit, in isolation, ohne eine Tonne zusätzliche Informationen und Erfahrungen, um sich einer erklären, planen und bestimmen, was (wenn überhaupt etwas) ist, die weniger als optimale Leistung. Wenn die Abfrage tuning könnte reduziert werden, um eine 10-Schritt-Prozess, es geschieht durch einen automatisierten Prozess. Ich war etwa um eine Liste aller der Dinge, die Sie verstehen müssen, um wirksam zu sein bei dieser aber das wäre eine sehr lange Liste.
nur die kurze Antwort, die ich denken kann... ist Blick für die Schritte in den plan, gehen Sie durch viel mehr bytes, als Sie vielleicht erraten. Dann überlegen Sie, wie Sie reduzieren können, der Nummer... über einen index oder partitionieren.
Ernst, Holen Sie sich Jonathan Lewis Buch, das auf Kosten Basiert Oracle Fundementals
Holen Sie Tom Kyte ' s Buch auf die Oracle-Datenbank-Architektur und mieten Sie eine Hütte im Wald für ein paar Wochen.
InformationsquelleAutor der Antwort
Dies ist eine massive Fläche von know-how (auch bekannt als eine schwarze Kunst).
Den Ansatz, den ich in der Regel nehmen ist:
Müssen Sie verstehen, die O() Auswirkungen der verschiedenen Indizes in den Kontext von dem, was Sie Fragen die Datenbank. Es hilft Ihnen, zu verstehen, Daten-Strukturen wie b-Bäume, hash-Tabellen etc. Dann erstellen Sie einen index, der funktionieren könnte und den Vorgang wiederholen.
Wenn Oracle beschließt, nicht zu verwenden Sie Ihre index, INDEX () - Hinweis und Blick auf den neuen plan. Die Kosten größer sein wird als der plan es habe zu wählen - dies ist der Grund, warum Sie nicht wählen Sie Ihren index. Das deutete plan könnte führen zu einige Einblicke darüber, warum der index nicht gut.
InformationsquelleAutor der Antwort WW.