Ich verwende EXPLAIN PLAN in Oracle-Datenbank auf eine einfache SELECT-Anweisung, nur um herauszufinden, wie es funktioniert. In einer Ausgabe von EXPLAIN PLAN wird table access by index rowid
erwähnt und in der anderen ist table access by index rowid BATCHED
. Was ist der Unterschied zwischen ihnen?Unterschied zwischen Tabellenzugriff von Index Rowid BATCHED und Tabellenzugriff von Index Rowid
Antwort
Die Dokumentation enthält nur einen Satz zu diesem Thema:
https://docs.oracle.com/database/121/TGSQL/tgsql_optop.htm#GUID-4180BA97-3E2C-41F9-B282-4FB3FF9532CB
Die Batched in Schritt gezeigt Zugriff 1 bedeutet, dass die Datenbank einen wenig Zeilen-IDs aus dem Index abgerufen hat, und versucht dann für den Zugriff auf Zeilen in Block Bestellung, um das Clustering zu verbessern und die Anzahl der Male zu reduzieren, die die Datenbank auf einen Block zugreifen muss.
Betrachten wir ein Beispiel unten der (vereinfachten) index
+-------------+------------------+
| index value | block nbr-rowid |
+-------------+------------------+
| 1 | 015-00|
| 2 | 034-000527 |
| 3 | 088-000285 |
| 4 | 015-000889 |
| 5 | 088-000632 |
........
........
In der "normalen" (nicht chargenweise) Methode Oracle ruft Zeilen in der Reihenfolge, die durch den Index bestimmt:
- ruft Block 15 ab, ruft dann Zeile 015-00von diesem Block ab
- ruft Block 34 ab, dann retrieve ves Zeilen 034-000527 aus diesem Block
- abruft Block 88, dann rufen Zeile 088 bis 000.285 aus diesem Block
- abruft Block 15 (wieder), dann ruft Zeile 015 bis 000.889 aus diesem Block
- abruft Block 88 (wieder), ruft dann Zeile 088 bis 000.632 aus diesem Block
im dosierten Verfahren Oracle einige Einträge aus dem Index liest, dann sortiert sie zunächst durch die Anzahl der bl ock, dann verarbeiten Einträge in der Reihenfolge nach der Anzahl der Blöcke bestimmt:
- abruft 15 blockiert, dann ruft Zeilen 015 bis 000.123 und von 015 bis 000.889 aus diesem Block
- abruft Block 34, ruft dann Zeile 034-000.527 aus diesem Block
- abruft Block 88, ruft dann Zeilen 088 bis 000.285 und von 088 bis 000.632 aus diesem Block
Wie man in diesem Beispiel zu sehen, die nur Blöcke wurden 3 mal anstelle von 5-mal, so dass eine Anzahl geholt der Block Lesevorgänge von der Festplatte wurde reduziert - einige Blöcke wurden nur gelesen y einmal statt zwei (oder mehr) mal.
Das Batched ist eine neue 12c-Funktion. – ibre5041