Überblick Was ist ein einzelner Index und was ist ein zusammengesetzter Index? Wann sollte ich einen neuen zusammengesetzten Index erstellen und worauf sollte ich im zusammengesetzten Index achten? Dieser Artikel ist hauptsächlich eine Zusammenfassung einiger Diskussionen im Internet.
Eins. Konzept
Ein einzelner Index ist eine Situation, in der der Index in einer Spalte aufgeführt ist, das heißt, die Anweisung, einen neuen Index zu erstellen, wird nur in einer Spalte implementiert.
Benutzer können Indizes in mehreren Spalten erstellen, die als zusammengesetzte Indizes (kombinierte Indexe) bezeichnet werden. Zusammengesetzte Indizes werden auf genau die gleiche Weise erstellt wie einzelne Indizes. Komposit-Indizes verursachen jedoch weniger Overhead während der Datenbankoperationen und können mehrere einzelne Indizes ersetzen. Wenn die Anzahl der Zeilen in einer Tabelle viel größer ist als die Anzahl der Schlüssel, kann diese Methode die Abfragegeschwindigkeit der Tabelle erheblich beschleunigen.
Es gibt zwei Konzepte gleichzeitig: enge Indizes und breite Indexe, schmale Indizes beziehen sich auf Indizes mit 1–2 Spalten und beziehen sich im Allgemeinen auf einen einzelnen Index, sofern nicht anders angegeben. Ein breiter Index ist ein Index mit mehr als 2 Spalten.
Ein wichtiges Prinzip des Indexdesigns ist die Verwendung schmaler Indizes anstelle breiter Indizes, da enge Indizes tendenziell effektiver sind als kombinierte Indizes. Engere Indizes geben dem Optimierer mehr Wahlmöglichkeiten, was oft zur Leistungssteigerung beiträgt.
Zwei. Verwendung
Erstellen Sie einen Index Index IDX1 auf Tabelle1 erstellen(Col1,Col2,Col3) Sich erkundigen wähle * aus Tabelle1, wobei Kol1= A und Kol2= B und Kol3 = C
Zu diesem Zeitpunkt scannt der Abfrageoptimierer die Tabelle nicht, sondern nimmt die Daten direkt aus dem Index, weil sich diese Daten im Index befinden, die als Overlay-Abfrage bezeichnet werden, und die Abfragegeschwindigkeit sehr hoch ist.
Drei. Notizen:
1. Wann ein zusammengesetzter Index verwendet werden sollte In der where-Bedingung ist das Feld indexiert, und wenn mehrere Felder verwendet werden, wird ein zusammengesetzter Index verwendet. Im Allgemeinen solltest du keine Indizes im Select-Feld erstellen (wenn du Select select1, col2, col3 aus mytable abfragen willst, brauchst du den oben genannten Index nicht). Die Indexierung basierend auf den Bedingungen ist ein äußerst wichtiges Prinzip. Achte darauf, nicht zu viele Indizes zu verwenden, sonst hat das einen großen Einfluss auf die Effizienz von Tabellenupdates, da du beim Bedienen von Tabellen viel Zeit in die Erstellung von Indizes investieren musst.
2. Bei zusammengesetzten Indizes ist es am besten, bei der Abfrage die Reihenfolge der Indizes zu finden, die am effizientesten ist. Zum Beispiel: IDX1:Index IDX1 auf Tabelle1 erstellen(kol2,kol3,kol5) wählen * aus Tabelle1, wobei kol2=A und kol3=B und kol5=D
Wenn es "select * aus Tabelle1 ist, wobei kol3=B und kol2=A und kol5=D" ist. Oder "select * aus Tabelle1, wobei kol3=B" den Index nicht verwendet oder der Effekt nicht bemerkbar ist
3. Wird ein zusammengesetzter Index einen einzelnen Index ersetzen? Viele Leute denken, dass das Hinzufügen eines beliebigen Feldes zum Cluster-Index die Abfragegeschwindigkeit verbessern kann, aber manche sind verwirrt: Wenn die zusammengesetzten clusterten Indexfelder separat abgefragt werden, wird die Abfragegeschwindigkeit dann verlangsamt? Mit dieser Frage werfen wir einen Blick auf die folgende Abfragegeschwindigkeit (die Ergebnismenge umfasst 250.000 Datenstücke): :( Datumsspalte fariqi rangiert in der Startspalte des zusammengesetzten Aggregationsindex an erster Stelle und der Benutzername neibuyonghu an zweiter Stelle)
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) Wähle Gid, Fariqi, Neibuyonghu, Titel von Tgongwen aus wo fariqi>'2004-5-5'
Abfragegeschwindigkeit: 2513 ms
(2) Wähle Gid, Fariqi, Neibuyonghu, Titel aus Tgongwen aus wo fariqi>'2004-5-5' und neibuyonghu='Büro'
Abfragegeschwindigkeit: 2516 ms
(3) Wähle Gid, Fariqi, Neibuyonghu, Titel von Tgongwen aus wobei neibuyonghu = 'Büro'
Abfragegeschwindigkeit: 60.280 Millisekunden
Aus den obigen Experimenten sehen wir, dass, wenn nur die Startspalte des clusterierten Index als Abfragebedingung verwendet wird, die Abfragegeschwindigkeit aller Spalten mit dem zusammengesetzten Clusterindex fast gleich ist, sogar etwas schneller als bei der Verwendung aller zusammengesetzten Indexspalten (wenn die Anzahl der Suchergebnismengen gleich ist). Wenn nur die nicht-startenden Spalten des zusammengesetzten aggregierten Index als Abfragebedingungen verwendet werden, bewirkt dieser Index nichts. Natürlich ist die Abfragegeschwindigkeit der Anweisungen 1 und 2 gleich, da die Anzahl der Einträge in der Abfrage gleich ist; wenn alle Spalten des zusammengesetzten Index verwendet werden und die Abfrageergebnisse wenige sind, entsteht eine "Indexüberschreibung", sodass die Leistung optimiert werden kann. Beachten Sie auch, dass unabhängig davon, ob Sie andere Spalten im Gesamtindex häufig verwenden oder nicht, die führende Spalte diejenige sein muss, die am häufigsten verwendet wird.
[Quelle: Abfrageoptimierung und Paginierungsalgorithmus-Schema http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Muss ich gleichzeitig einen einzelnen Index und einen zusammengesetzten Index in derselben Spalte erstellen? Experiment: Sysbase 5.0 Tabelle Tabelle 1 Felder: kol1, kol2, kol3
Testschritte: (1) Erstelle des Index idx1 auf kol1 Führe select * aus table1 aus, wobei col1=A idx1 verwendet Führe select * aus table1 aus, wobei col1=A und col2=B ebenfalls idx1 verwenden
(2) Löschen Sie den Index idx1 und erstellen Sie dann einen idx2 auf dem zusammengesetzten Index (kol1,kol2) Beide Abfragen verwenden idx2
(3) Wenn beide Indizes idx1 und idx2 existieren Es ist nicht so, dass kol1='A' idx1 verwendet; wo kol1=A und kol2=B idx2 verwendet. Sein Abfrageoptimierer verwendet einen der zuvor häufig verwendeten Indizes. Verwende entweder idx1 oder idx2.
Man kann sehen, dass (1) Für eine Tabelle, wenn es einen zusammengesetzten Index auf (Kol1, Kol2) gibt, muss auf Kol1 nicht gleichzeitig ein einzelner Index erstellt werden. (2) Wenn die Abfragebedingungen dies erfordern, kann man den zusammengesetzten Index auf (kol1, kol2) hinzufügen, wenn bereits ein einziger Index auf kol1 vorhanden ist, was die Effizienz bis zu einem gewissen Grad verbessern kann. (3) Es gibt nicht besonders viele Vorteile, einen zusammengesetzten Index mit mehreren Körpern (die 5 oder 6 Felder) gleichzeitig zu etablieren; relativ gesehen kann die Einrichtung eines Index mit mehreren schmalen Körpern (die nur ein oder höchstens zwei Felder enthalten) eine bessere Effizienz und Flexibilität erzielen.
5. Muss ich die Anfrage abdecken? Es ist im Allgemeinen ratsam, keine Strategie zu verwenden, die vollständige Rechercheabdeckung betont. Wenn alle Spalten in der Select-Klausel von einem nicht geclusterten Index überschrieben werden, erkennt der Optimierer dies und liefert eine gute Leistung. Dies führt jedoch oft zu einem übermäßig breiten Index und einer übermäßigen Abhängigkeit davon, dass der Optimierer die Policy nutzt. Typischerweise werden für eine größere Anzahl von Abfragen schmale Indizes verwendet, was eine bessere Leistung für große Abfragen bietet. |