Servus,
Auf den index würde ich aber nach Möglichkeit verzichten. sowas kann den Performance Todesstoss für Deine DB bedeuten.
Meinst Du jetzt, dass man Indizes nicht einsetzen soll?
Ein schlaues Buch (Oracle Tuning | Verlag Oracle) hat mir mal gesagt, Indiziere Character Felder nur dann wenn es anderster nicht geht.
Genau dann, wenn Du Strings suchst um einen Einstieg zu bekommen.
Genau dann wenn es keine andere Möglichkeit gibt als exakt nach dem Sring zu suchen. Und dann auch nur dann, wenn man sehr oft drauf zugreift.
Weil genau dann machen Indizierte Character Felder Sinn.
Wenn dem so ist, so hast Du imho ein wesentliches Konzept von Datenbanken nicht verstanden. Indizes sind dafür da, dass man sie (sinnvoll) verwendet,
Richtig sinnvoll -> Laut Oracle Handbuch möglichst selten.
um Suche und Verknüpfungen zu beschleunigen. Wenn Du sie nicht verwendest, würde jede Suche und jeder Join auf alle beteiligten Tabellen einen Zugriff auf alle Daten in den beteiligten Tabellen (Full-Table-Scan) nach sich ziehen. Gerade wenn viele Datensätze vorhanden sind könnte das 'den Todesstoss für die DB', wie Du es ausdrückst, bedeuten.
Ja genau ein Beginner kann nun einschätzen, welche Auswirkung schlechte Indizierung auf eine DB haben kann. ?!?
Eine derarteige suche ist ebenfalls schlecht. Aber wer was beim DB Design denkt, wird vermeiden, mehrere Tabellen zu indizieren und packt es in eine Tabelle zusammen. So gut es eben geht.
Und Du hast grundsätzlich das Konzept eines Sinnvollen DB Designs nicht verstanden richtig?
Denn dann wüsstest du, das ein Fulltable Scan nur beim Select oder in der where Klausel zum tragen kommt.
Aber auch das kann man eingrenzen, indem man weitere Auschlusskriterien verwendet. Sehr Sinnvoll übrigens, damit man nicht zufällig mehrere Einräge findet, die in einer Spalte die gleichen Werte haben. Z.B: bei einem Delete oder Update.
Dass man beim Zugriff auf die DB möglichst nicht nach Strings suchen sollte sondern schlauerweise wo immer es geht mit IDs arbeiten soll, wüsstest Du dann auch. Der Performance gewinn durch Verwendung numerischer ID
s ist enorm.
Eine schlechte Indizierung wiederum bremst bei jedem Update Delete Insert der betreffenden Tabellen.
Davon abgesehen, dass dies Teilweise eine DB unnötig zumüllt.
Und wie man eine Suchmenge sinnvoll eingrenzt z.B. mit der Verwendung von Numerischen ID`s dürfte Dir klar sein.
Von daher ist die Inizierung von Character Felder auf das nötigste zu beschränken es gibt bessere und effizentere optimierungs Möglichkeiten.
Natürlich soll man nicht über alles Denkbare Indizes legen, da sonst die Performance beim Modifizieren der Daten leidet. Der sinnvolle Aufbau von Indizes ist imho übrigends eine der wichtigsten Arbeiten eines Datenbankdesigners, gleich nach dem Tabellendesign.
»»
Ja genau und daher weiss der DB Designer, dass er sein Design so wählt, dass er um die Indizierung möglichst herum kommt.
Gruss Matze