Ja, der Vorteil ist, wenn Sie einen Teil des Index abfragen möchten. Wenn Sie die teilweise verwendeten Prädikate an die erste Stelle setzen, kann der Index für Abfragen verwendet werden, an denen diese Prädikate beteiligt sind, jedoch nicht alle Spalten im Index.
Sofern Sie keine anderen Anforderungen haben, kann es hilfreich sein, die selektivsten Prädikate an die erste Stelle zu setzen, da hierdurch Indexsuchvorgänge schneller reduziert werden können.
In Ihrem Fall IDX_2
ist dies je nach Art der Abfragen in der Tabelle nicht unbedingt redundant. Es ist jedoch möglicherweise nicht erforderlich, alle Spalten einzuschließen. Wenn Sie zum Beispiel viele Abfragen nach location
und date
dann durchführen, IDX_2
kann dies hilfreich sein, um diese Abfragen zu lösen, da dies IDX_1
nicht in der richtigen Reihenfolge erfolgt, um diesbezüglich hilfreich zu sein. Sie können jedoch feststellen, dass dies item
überflüssig ist IDX_2
.
Seit 9i hat Oracle einen "Skip Scan" -Operator eingeführt, mit dem nachgestellte Indexspalten effizienter abgefragt werden können, wodurch der Bedarf an zusätzlichen Indizes dieser Art verringert werden kann.
In einem spezielleren Fall kann die Abfrage, wenn Sie item
nach location
und date
ohne weitere Spalten abfragen, vollständig über den Index aufgelöst werden, ohne dass etwas aus der Tabelle gelesen werden muss. Sie können auch abdeckende Indizes erstellen, an die nicht indizierte Spalten angehängt sind. Wenn alle erforderlichen Spalten aus dem Deckungsindex aufgelöst werden können, muss die Abfrage die Haupttabelle überhaupt nicht berühren.
Zum Schluss noch eine Antwort auf Ihre letzte Frage: Wenn Sie eine Reihe regelmäßig verwendeter Abfragen haben, die viel Ressourcen verbrauchen und mithilfe eines Indexes optimiert werden könnten, ist dies mit Sicherheit eine Überlegung wert. Das Verwalten von Indizes ist jedoch mit einem Mehraufwand für Einfügungen verbunden, sodass Sie die Abfrageleistung gegen den Mehraufwand abwägen müssen, den die Indizes für Einfügungs- oder Aktualisierungsvorgänge verursachen.
Eine weitere zu berücksichtigende Sache sind Spalten mit vielen Nullwerten.
Wenn nach diesen Spalten im Index Spalten angegeben sind, müssen die Nullwerte indiziert werden. Ansonsten werden Nullwerte wie üblich nicht indiziert (dies setzt natürlich voraus, dass Sie einen B-Tree-Index verwenden).
Wenn Sie also Spalten mit einer großen Anzahl von Nullwerten haben, können Sie durch das Setzen dieser Spalten am Ende des Indexes erheblich Speicherplatz sparen.
quelle