Frage

Wenn Sie mit Tabellen in Oracle arbeiten, wie Sie wissen, wenn Sie einen guten Index im Vergleich zu einem schlechten Index einrichten?

War es hilfreich?

Lösung

Das hängt davon ab, was Sie mit ‚gut‘ und ‚schlecht‘. Grundsätzlich müssen Sie erkennen, dass jeder Index, den Sie hinzufügen, wird die Leistung auf jeder Suche zu erhöhen, indem diese Spalte (so einen Index auf die ‚Nachnamen‘ Spalte einer Person Tabelle um die Leistung auf Abfragen zu erhöhen, „wo name =“ in ihnen haben), aber verringert Schreibleistung über die gesamte Tabelle.

Der Grund dafür ist, wenn Sie eine Zeile hinzufügen oder aktualisieren, muss es Add-oder aktualisiert sowohl die Tabelle selbst und jeder Index diese Zeile ist ein Mitglied. Also, wenn Sie fünf Indizes für eine Tabelle, die jeweils zusätzlich zu den sechs Plätzen schreiben müssen - fünf Indizes und den Tisch -. Und ein Update kann im schlimmsten Fall zu sechs Plätze Ausbessern sein

Indexerstellung ist ein Balanceakt dann zwischen Abfragegeschwindigkeit und Schreibgeschwindigkeit. In einigen Fällen, wie zum Beispiel ein Data Mart, die nur mit Daten einmal pro Woche in einem Nacht Job geladen ist, aber täglich tausende Male abgefragt, macht es sehr viel Sinn, mit Indizes zu überlasten und die Abfragen so viel wie möglich beschleunigen. Im Fall von Online-Transaktionsverarbeitungssystemen jedoch wollen Sie ein Gleichgewicht zwischen ihnen, um zu versuchen und zu finden.

Also kurz gesagt, fügen Sie Indizes zu Spalten, die viele in SELECT-Abfragen verwendet werden, sondern versuchen, zu viele zu vermeiden, das Hinzufügen und so fügen Sie die am häufigsten verwendeten Spalten zuerst.

Nach dem, dass es eine Frage der Belastungstests, um zu sehen, wie die Leistung unter Produktionsbedingungen reagiert, und eine Menge Tweaking eine aceeptable Balance zu finden.

Andere Tipps

Felder, die verschieden sind, sehr spezifisch oder einzigartig guten Indizes machen. Wie Datum und Zeitstempel, einzigartige erhöhenden Nummern (allgemein als Primärschlüssel verwendet wird), Personennamen, Kfz-Kennzeichen, etc ...

wäre ein Gegenbeispiel Geschlecht sein - es gibt nur zwei gemeinsame Werte, so dass der Index nicht wirklich die Anzahl der Zeilen zu reduzieren, die gescannt werden muss,

.

in voller Länge beschreibende machen Freiform-Strings schlechten Indizes, als wer auch immer die Abfrage ausführt selten den genauen Wert der Zeichenfolge kennt.

linear geordneten Daten (wie zB Zeitstempel oder Datumsangaben) als gruppierten Index häufig verwendet, die die Zeilen zwingt in Index-Reihenfolge gespeichert werden, und ermöglicht den Zugriff in Ordnung, Bereichsabfragen stark beschleunigt (zB ‚Geben Sie mir die Kundenaufträge von Oktober bis Dezember). In einem solchen Fall kann die DB-Engine einfach auf den ersten Datensatz von dem angegebenen Bereich suchen und Lesen nacheinander gestartet werden, bis es die letzte trifft.

Ist hier ein großer SQL Server-Artikel: http://www.sql-server-performance.com/tips/optimizing_indexes_general_p1. aspx

Obwohl die Mechanik nicht auf Oracle arbeitet, sind die Tipps sehr apropos (minus die Sache auf Clustered-Indizes, die nicht ganz die gleiche Art und Weise in Oracle arbeiten).

@Infamous Cow -. Sie müssen denken an Primärschlüssel sein, keine Indizes

@Xenph Yan - Etwas andere nicht berührt ist die Wahl, was Art von Index zu erstellen. Einige Datenbanken nicht wirklich geben Ihnen viel Auswahl, aber einige haben eine große Auswahl von möglichen Indizes. B-Bäume sind die default , aber nicht immer die beste Art von Index. die richtige Struktur Die Wahl hängt von der Art der Nutzung zu haben, die Sie erwarten. Welche Art von Fragen, brauchen Sie am meisten unterstützen? Sind Sie in einem schreib meist oder schreib meist Umwelt? Sind Ihre Schreiben von Updates oder Appends dominiert? Etc, etc.

Eine Beschreibung der verschiedenen Arten von Indizes und ihre Vor- und Nachteile finden Sie hier: http://20bits.com/2008/05/13/interview-questions-database-indexes/ .

Einige Faustregeln, wenn Sie eine bestimmte Abfrage zu verbessern versuchen.

Für eine bestimmte Tabelle (wo man Oracle denken sollte beginnen) versucht jede der Spalt in der WHERE-Klausel verwendet, die Indizierung. Setzen Sie Spalten mit Gleichheit zuerst, gefolgt von Spalten mit einer Reihe oder wie.

Zum Beispiel:

WHERE CompanyCode = ? AND Amount BETWEEN 100 AND 200

Wenn Spalten sehr groß sind (zum Beispiel Sie speichern einige XML oder etwas) Sie können besser dran, sie aus dem Index zu verlassen. Dies wird der Index kleiner scannen machen, vorausgesetzt, müssen Sie in der Tabellenzeile gehen ohnehin die Auswahlliste zu erfüllen.

Alternativ kann, wenn alle Werte in der SELECT und WHERE-Klauseln in den Index sind Oracle nicht die Tabellenzeile zugreifen müssen. Also manchmal ist es eine gute Idee, um die ausgewählten Werte zuletzt im Index zu setzen und einen Tabellenzugriff alle zusammen zu vermeiden.

Sie könnten ein Buch über die besten Möglichkeiten, um Index schreiben -. Sucht Autor Jonathan Lewis

Ein guter Index ist etwas, das Sie sich verlassen können einzigartig für eine bestimmte Tabellenzeile sein.

Ein allgemein verwendetes Indexschema ist die Verwendung von Zahlen, die in der Tabelle von 1 für jede Zeile erhöht. Jede Zeile wird eine unterschiedliche Anzahl Index am Ende mit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top