Oracle Aufbau mehrspaltiger Index

Hallo,

meine Entwickler lieben mehrspaltige Indizes.
Nu ist es so, dass sie die einfach zusammen „nageln“ ohne sich Gedanken zu machen und auch nicht begründen können in welcher Reihenfolge die Spalten im Index angelegt werden.

Ich habe in Erinnerung, dass bei einem mehrspaltigen Index die Spalte mit der höchsten Selektivität an erster Stelle kommen sollte, finde dazu aber derzeit nichts schriftliches.

a. Ist meine Erinnerung richtig ?
b. Wenn Ja, wo kann man es nachlesen und gibt es evtl. eine bildliche Darstellung über den Aufbau/Verteilung im Index ?

Grüße

Chris

Hallo Chris,

ja dem ist so, nein ich habe keine Quelle. Aber vielleicht ein Argument. Ein Index bringt Dich zur einer Stelle, aber der Du suchen kannst. Wenn man den Wert für die erste indizierte Stelle gefunden hat, muss man für diesen Wert alle Werte von der zweiten indizierten Spalte lesen (hier wieder durch ein Index unterstützt). Klar sollte aber sein, dass man um so schneller ist, wenn man am Anfang möglichst wenig lesen muss. Denk Dir am besten ein Index aus der untypisch ist (wie Geschlecht [2 Ausprägungen] und Alter [ca 80 Ausprägungen]).

MfG Georg V.

P.S.: Ja ich weiss, dass ein Index erst ab etwa 8 Ausprägungen überhaupt Sinn macht. Also bitte nicht darüber meckern.

Moin, Chris,

Ich habe in Erinnerung, dass bei einem mehrspaltigen Index
die Spalte mit der höchsten Selektivität an erster Stelle
kommen sollte

wenn das erste Indexfeld 2 Ausprägungen hat, wird damit die Suchmenge halbiert, bei dreien gedrittelt usw. Somit wäre eine solche Anordnung für eine schnelle Suche sicher zweckmäßig, aber nicht unbedingt für die spezielle Anwendung geeignet. Vielleicht interessiert sich der Benutzer in erster Linie für die Geburtstage, erst dann für den Wohnort.

wo kann man es nachlesen

Sowas schreibt niemand auf.

gibt es evtl. eine
bildliche Darstellung über den Aufbau/Verteilung im Index ?

Lass den Anwender eine Tabelle malen, in der die Felder nach seinen Wünschen geordnet sind, dann kommt Licht ins Dunkel. Immer dran denken: Indizieren heißt schlicht (virtuell) sortieren.

Gruß Ralf

Hallo Georg,

danke für deine Antwort.
Was die Entwickler halt gerne machen ist einen Index zu bauen und die 1.Spalte hat eine Selectivität von 1 oder 2, dann kommt eine mit 25 und an dritter Stelle dann eine mit 4895.

Was ich noch suche ist eine Grafik eines mehrspaltigen Index.

Grüße

Chris

ZUm Thema Indizierung / Oracle kann ich dir noch diesen Blog empfehlen :

http://richardfoote.wordpress.com/

Grüsse,

1 Like

Hallo Chris,

Grafik dürfte etwas schwierig sein. Aber eventuell könnte Dir der folgende Artikel (auf englisch) helfen http://www.dba-oracle.com/oracle_tips_index_column_o… .

Kurz zusammengefasst: Testtabelle aufbauen, mehrere Indizes (mit unterschiedlichen Reihenfolgen) aufbauen, Tabellenstatistik aufbauen und sich die SQL-Ausführungspläne anzeigen lassen (inklusive der Resourcen). Übrigens könnte ich fast darauf wetten, dass die Indizes unterschiedlichen Größen haben (das kommt aber nur bei wirklich großen Tabellen so richtig zur Wirkung).

MfG Georg V.

1 Like

Hallo Georg,

das ist ein interessanter Artikel, vielen Dank !

ich werde das mal nachspielen, dann bekomme ich vielleicht den endgültigen Durchblick.

Danke und Grüße

Chris

Hallo Ulrich,

danke, den werde ich mir auch mal zu Gemüte führen.

Grüße

Chris

Hi Ralf,

danke für deine Antwort, ich muß das mal in Ruhe durchspielen, dann komme ich noch dahinter…

Grüße

Chris