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.
- 1. Orakel-Index auf Rowid-Spalte
- 2. Silverlight RESTful Azure-Tabellenzugriff
- 3. Was ist rowID & rowNum (ROWID vs ROWNUM)
- 4. Maximo Anywhere Neuer Tabellenzugriff
- 5. jqGrid bekomme aktuelle rowid
- 6. Ändern von rowId auf jqgrid?
- 7. Oracle Query Tuning (doppelten Tabellenzugriff)
- 8. Unterschied zwischen spärlichem Index und dichtem Index
- 9. Ormlite unbekannt ROWID
- 10. Unterschied zwischen Suche und Index
- 11. SQLite erhalten ROWID
- 12. Wird Rowid wiederverwendet?
- 13. PL/SQL "WHERE CURRENT VON" vs "ROWID"
- 14. Wähle Rowid aus mehreren Tabellen
- 15. Unterschied zwischen einheitlicher Position und einheitlichem Index?
- 16. std :: map Unterschied zwischen Index und Einfügen von Aufrufen
- 17. Unterschied zwischen $ (this) .index() und element.index (this)
- 18. Tabellenzugriff vs Funktionsaufruf + bedingte Bestimmung: Was ist schneller?
- 19. Was ist der Unterschied zwischen dem create index und dem alter add index von MySQL?
- 20. Wie bekomme ich rowID im rowattr Block von jqgrid?
- 21. sqlite3: Wie Rowid alias Spalte (Primärschlüssel)
- 22. Rowid von SQL Server abrufen Ansicht nach Update anzeigen
- 23. Wie verwendet man eine von PreparedStatement.getGeneratedKeys() zurückgegebene RowId?
- 24. In Android Sqlite ist ROWID wie Primärschlüssel?
- 25. Wie bekomme ich die Rowid von einem ExecuteOracleNonQuery in C#
- 26. Entspricht der RowID von Oracle in SQL Server
- 27. Was ist der Unterschied zwischen einem Table Scan und einem Clustered Index Scan?
- 28. Wie generiert man jQuery DataTables rowId clientseitig?
- 29. Datentabellen rowID mit einer Reihe Ausgabe beginnend
- 30. sqlite3-Rowid-Alias wird nicht ordnungsgemäß erstellt
Das Batched ist eine neue 12c-Funktion. – ibre5041