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

Versteckte Funktionen in Oracle

"Vollständige Tabellenscans sind nicht immer schlecht. Indizes sind nicht immer gut."

Eine indexbasierte Zugriffsmethode ist beim Lesen von Zeilen weniger effizient als ein vollständiger Scan, wenn Sie sie in Bezug auf Zeilen messen, auf die pro Arbeitseinheit zugegriffen wird (normalerweise pro logischem Lesevorgang). Viele Tools interpretieren jedoch einen vollständigen Tabellenscan als Zeichen von Ineffizienz.

Nehmen Sie ein Beispiel, bei dem Sie einige hundert Rechnungen aus einer Rechnungstabelle lesen und in einer kleinen Nachschlagetabelle nach einer Zahlungsmethode suchen. Die Verwendung eines Index zum Prüfen der Nachschlagetabelle für jede Rechnung bedeutet wahrscheinlich drei oder vier logische IOs pro Rechnung. Ein vollständiger Scan der Nachschlagetabelle zur Vorbereitung einer Hash-Verknüpfung aus den Rechnungsdaten würde jedoch wahrscheinlich nur ein paar logische Lesevorgänge erfordern, und die Hash-Verknüpfung selbst würde fast ohne Kosten im Speicher vollständig sein.

Viele Tools würden sich dies jedoch ansehen und "vollständigen Tabellenscan" sehen und Ihnen sagen, dass Sie versuchen sollen, einen Index zu verwenden. Wenn Sie dies tun, haben Sie möglicherweise gerade Ihren Code verstimmt.

Übrigens führt eine übermäßige Abhängigkeit von Indizes, wie im obigen Beispiel, dazu, dass die "Buffer Cache Hit Ratio" steigt. Aus diesem Grund ist die BCHR als Prädiktor für die Systemeffizienz größtenteils Unsinn.