Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie interpretieren Sie den EXPLAIN-Plan einer Abfrage?

Ich schaudere, wenn ich Kommentare sehe, dass vollständige Tablescans schlecht und der Indexzugriff gut sind. Full Table Scans, Index Range Scans, Fast Full Index Scans, Nested Loops, Merge Join, Hash Joins usw. sind einfache Zugriffsmechanismen, die vom Analysten verstanden und mit Kenntnissen über die Datenbankstruktur und den Zweck einer Abfrage kombiniert werden müssen um sinnvolle Schlussfolgerungen zu ziehen.

Ein vollständiger Scan ist einfach die effizienteste Methode zum Lesen eines großen Teils der Blöcke eines Datensegments (einer Tabelle oder einer Tabellen-(Unter-)Partition), und obwohl dies häufig auf ein Leistungsproblem hinweisen kann, ist dies nur im Kontext der Fall ob es sich um einen effizienten Mechanismus zum Erreichen der Ziele der Abfrage handelt. Als Data-Warehouse- und BI-Experte ist mein wichtigstes Warnsignal für die Leistung eine indexbasierte Zugriffsmethode und eine verschachtelte Schleife.

Für den Mechanismus zum Lesen eines Explain-Plans ist die Oracle-Dokumentation also eine gute Anleitung:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

Lies dir auch den Performance Tuning Guide gut durch.

Haben Sie auch ein Google für "Kardinalitäts-Feedback", eine Technik, bei der ein Erklärungsplan verwendet werden kann, um die Schätzungen der Kardinalität in verschiedenen Phasen einer Abfrage mit den tatsächlichen Kardinalitäten zu vergleichen, die während der Ausführung aufgetreten sind. Wolfgang Breitling ist der Autor der Methode, glaube ich.

Unterm Strich also:Verständnis der Zugriffsmechanismen. Verstehe die Datenbank. Verstehen Sie die Absicht der Abfrage. Vermeiden Sie Faustregeln.