Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[ORACLE] Index warum geht`s schneller?

Empfohlene Antworten

Hallo Kollegen,

ich habe mir heute eine Frage bezüglich Indezes gestellt.

Und zwar folgendes Szenario:

Ich habe eine Tabelle TAB_USER. Diese hat folgende Felder

USER_ID int

NNAME varchar(50)

VNAME varchar(50)

STR varchar(50)

PLZ int

ORT varchar(50)

TEL varchar(50)

Nun ist USER_ID mein Primärschlüßel. Lege ich einen Index über diesen somit ist der Zugriff über eine WHERE Klausel mit USER_ID schneller als wenn ich keinen Index habe - z.B.:

 Select * from TAB_USER where USER_ID = 57;

Aber warum ist das so?

Ich habe auch schon versucht, die Eigenschaften von den verschiedenen Index-Typen zu verstehen (B-Tree, Bitmap,etc.) aber bis auf IO-Tables habe ich nicht wirklich verstanden warum es schneller geht. Bei IO-Tables stehen die Daten mit im Index...

Das es so ist, will hier wohl keiner abstreiten.

Aber warum ist ein Zugriff über den Index schneller? Wie verknüpft Oracle den Indextreffer mit den Daten in den Tabellen?

Das Thema ist vielleicht etwas abstrakt, aber mich interessiert trotzdem wie das "intern" funktioniert.

Wäre super wenn mir das jemand erklären könnte oder evtl. Links postet in denen es gut beschrieben ist.

Danke :)

Gruß

sayso

Na wenn du dir z.B. die Idee hinter Balaced Trees anschaust wirst du feststellen, dass du mit einigen wenigen Entscheidungen schon einen Großteil der Zeilen ausschließen kannst. Wenn z.B. auf der Stammebene A-M und N-Z hast und dein gesuchtes Wort mit D anfängt hast du damit schon etwa die hälfte aller Zeilen ausgeschlossen (von gleichmäßiger Verteilung ausgegangen) nach der zweiten Entscheidung auf der Zwischenebene hast du die in Frage kommenden Zeilen schon auf 1/4 reduziert und so weiter...

Ob jetzt ganz am Schluss die Daten direkt in den Seiten des B-Tree stehen oder dort ein Verweis auf den Ort der Dateien ist nicht mehr der große Unterschied...

Ob jetzt ganz am Schluss die Daten direkt in den Seiten des B-Tree stehen oder dort ein Verweis auf den Ort der Dateien ist nicht mehr der große Unterschied...

hmm aber warum ist dann ein IOT schneller als eine Tabelle mit Index?

Die entscheidende Frage ist doch: Wie sieht so ein Verweis aus (vom Index zu den Daten) ?

So einen Tree könnte man doch auch in der Tabelle aufbauen (vorausgesetzt wie in meinen Beispiel) der Primärschlüssel ist ein auto_increment.

Also der SQL-Index kann sich nach Wikipedia überall unterschiedlich verhalten. Die Handhabung ist herstellerspezifisch. Also kann da jeder sein eigenes Süppchen intern brauen. Bei Oracle ist es, wie es in Deinem Link steht, wohl vor allem die Read/Write-Blockgröße. Das bedeutet, daß die Größe des Blocks möglichst ein Vielfaches des Filesystems der Platte entsprechen sollte, damit die Zugriffszeiten optimiert werden. Zusätzlich spielt aber sicher auch die betriebssysteminterne Caching-Routine noch dazu. Ich denke, mit Experimentieren könnte man da am weitesten kommen, wo das Optimum in etwa liegt.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.