Wie wirken sich Indizes auf die Abfrageleistung aus?

12

Offensichtlich wirkt sich die Beibehaltung mehrerer verschiedener Indizes negativ auf die Leistung beim Einfügen und Löschen aus. Wie wäre es mit der Abfrageleistung: Ist es überhaupt sinnvoll, zu viele Indizes in einer Tabelle zu halten? Verbessert sich die Abfrageleistung in jedem Fall, wenn ein Index hinzugefügt wird (natürlich für Abfragen, bei denen der Index verwendet wird), oder ist es sogar möglich, dass sich die Abfrageleistung bei zu vielen Indizes verschlechtert, da alle Indizes herangezogen werden müssen, um den Index zu erhalten Ergebnis?

Falls eine Tabelle verschiedene Indizes enthält: Werden alle Indizes berücksichtigt oder nur die besten aus Sicht des Optimierers? Implementiert Oracle mehrdimensionale Indizes?

Paweloque
quelle
2
Warum testen Sie das nicht und berichten über Ihre Ergebnisse? :)
Neil McGuigan
Ich werde morgen tun :)
Paweloque
2
Indizes verlangsamen Löschvorgänge nicht unbedingt, sie können sie auch beschleunigen (genau wie Aktualisierungen einen Index nutzen können)
a_horse_with_no_name
@el Chef, was nützt es, das Rad neu zu erfinden? Also ja, der Effekt der Abfrageleistung ist fraglich, obwohl wir sicher sind, dass die Einfügungen / Löschungen betroffen sind. Wie wäre es mit Updates? Werden sie negativ beeinflusst?
Sangram

Antworten:

15

Die Erstellung des Plans wird geringfügig länger dauern, wenn mehr Indizes zu berücksichtigen sind, aber ich bezweifle, dass der Unterschied messbar signifikant wäre. Die Gründe für das Löschen eines Indexes führen die Abfrageleistung nicht auf. Auf der anderen Seite sollten Sie im Allgemeinen keine Indizes erstellen, es sei denn, Sie wissen, dass sie verwendet werden, um eine Abfrage effizienter zu gestalten.

Im Oracle Concepts Guide finden Sie die Kriterien zum Erstellen eines Index.

Generell sollten Sie in den folgenden Situationen einen Index für eine Spalte erstellen:

  • Die indizierten Spalten werden häufig abgefragt und geben einen kleinen Prozentsatz der Gesamtzahl der Zeilen in der Tabelle zurück.

  • Für die indizierte (n) Spalte (n) existiert eine referenzielle Integritätsbedingung. Der Index ist eine Möglichkeit, eine vollständige Tabellensperre zu vermeiden, die andernfalls erforderlich wäre, wenn Sie den Primärschlüssel der übergeordneten Tabelle aktualisieren, in die übergeordnete Tabelle einfügen oder aus der übergeordneten Tabelle löschen.

  • Eine eindeutige Schlüsselbedingung wird in die Tabelle eingefügt, und Sie möchten den Index und alle Indexoptionen manuell angeben.

Alle Indizes werden in dem Sinne berücksichtigt, dass alle Indizes für die Tabellen in der Abfrage überprüft werden, um festzustellen, ob sie verwendet werden können. Diejenigen, die sein könnten, werden weiter untersucht, um den Nutzen zu bestimmen.

Leigh Riffel
quelle
7

Solange Ihre Statistiken aktuell sind, sollte der kostenbasierte Optimierer sinnvolle Entscheidungen darüber treffen, welche Indizes verwendet werden sollen. Wenn dies nicht der Fall ist, ist es an der Zeit, Hinweise zu verwenden . Es wird niemals ein Index für eine Spalte abgefragt, die zur Erfüllung der Abfrage nicht erforderlich ist.

Gaius
quelle
0

Ich fand dies in der Auswahl einer Indexstrategie der Handbuch Anwendungsentwickler unter . Auf dieser Seite geht es um die Auswahl einer Indexstrategie:

Begrenzen Sie die Anzahl der Indizes für jede Tabelle

Je mehr Indizes vorhanden sind, desto mehr Aufwand entsteht, wenn die Tabelle geändert wird. Wenn Zeilen eingefügt oder gelöscht werden, müssen alle Indizes in der Tabelle aktualisiert werden. Wenn eine Spalte aktualisiert wird, müssen alle Indizes für die Spalte aktualisiert werden.

Sie müssen den Leistungsvorteil von Indizes für Abfragen mit dem Leistungsaufwand für Aktualisierungen abwägen. Wenn eine Tabelle beispielsweise in erster Linie schreibgeschützt ist, können Sie mehr Indizes verwenden. Wenn eine Tabelle jedoch stark aktualisiert wird, werden möglicherweise weniger Indizes verwendet.

Sangram
quelle
2
Von der Frage: „Offensichtlich mehrere Indizes haben einen negativen Einfluss auf Einfügen und Löschen von Leistung zu halten Wie über die Abfrageleistung“
Jack sagt Versuch topanswers.xyz