Frage

Ich habe gesagt werden, und lesen Sie es überall (aber niemand wagte zu erklären, warum), dass, wenn Sie einen Index für mehrere Spalten zu komponieren sollte ich die selektivsten Spalte die erste Stelle setzen, aus Leistungsgründen. Warum das? Ist es ein Mythos?

War es hilfreich?

Lösung

  

Ich sollte den selektivsten Spalte die erste Stelle setzen

Laut Tom hat Spalte Selektivität keine Auswirkungen auf die Leistung für Abfragen, die alle die Spalten im Index verwenden (es wirkt sich Oracle die Fähigkeit, den Index zu komprimieren).

  

Es ist nicht das erste, was, es ist nicht das Wichtigste. sicher ist es etwas zu beachten, aber es ist relativ weit unten in dem großen Plan der Dinge.

     

In bestimmten seltsam, sehr eigenartig und abnormal Fällen (wie die oben mit wirklich völlig schief Daten) kann die Selektivität leicht Angelegenheit jedoch sind sie

     

a) ziemlich selten   b) wirklich abhängig von den Werten zur Laufzeit verwendet, da alle schiefen Abfragen sind

     

so im allgemeinen Blick auf die Fragen, die Sie haben, versuchen Sie die Indizes, die Sie auf dieser Grundlage müssen, zu minimieren.

     

Die Anzahl der unterschiedlichen Werte in einer Spalte in einem verketteten Index ist nicht relevant, wenn man bedenkt,   die Position im Index.

Allerdings sollten diese Überlegungen zweiten kommen, wenn auf Indexspalte, um zu entscheiden. Mehr ist wichtig, um sicherzustellen, dass der Index zu viele Abfragen nützlich sein kann, so dass die Spalte, um die Verwendung dieser Spalten (oder deren Fehlen) in der where-Klausel Ihrer Abfragen (aus dem Grund, dargestellt durch AndreKR) reflektieren muss.

  

, wie Sie mit dem Index - das ist es, was relevant ist, bei der Entscheidung

.

Alle anderen Dinge gleich sind, würde ich zuerst die selektivsten Spalte setzen nach wie vor. Es fühlt sich einfach richtig ...

Update: Ein weiteres Zitat von Tom (dank milan für die Suche nach ihm).

  

In Oracle 5 (ja, Version 5!), War es ein Argument für die selektivsten Spalten platzieren zuerst   in einem Index.

     

Seitdem ist es nicht wahr, dass die Inbetriebnahme der kritischste Einträge zuerst in dem Index   wird der Index kleiner oder effizienter gestalten. Es scheint, wie es wird, aber es wird nicht.

     

Mit dem Index   Schlüssel Kompression gibt es ein überzeugendes Argument in die andere Richtung zu gehen, da es den Index machen   kleiner. Es sollte jedoch durch angetrieben werden, wie Sie den Index verwenden, wie zuvor angegeben.

Andere Tipps

Sie können Spalten von rechts nach links weglassen, wenn Sie einen Index verwenden, das heißt, wenn Sie einen Index für col_a, col_b haben Sie es in WHERE col_a = x verwenden können, aber man kann es nicht in WHERE col_b = x verwenden.

Stellen Sie sich ein Telefonbuch zu haben, die von den Vornamen sortiert ist und dann von den Nachnamen.

Zumindest in Europa und den USA Vornamen haben eine viel geringere Selektivität als Nachname, so suchen Sie den Vornamen würde die Ergebnismenge nicht viel verengen, so dass es immer noch viele Seiten für die richtigen Nachnamen zu überprüfen wäre.

Die Reihenfolge der Spalten im Index soll durch Ihre Fragen bestimmt werden und keine Selektivität Überlegungen. Wenn Sie einen Index auf (a, b, c), und die meisten Ihrer einzelnen Spalt Abfragen sind gegen Spalt c, gefolgt von einem, dann legt sie in der Größenordnung von c, a, b in der Indexdefinition für die beste Effizienz . Oracle bevorzugt für die Abfrage die Vorderkante des Index zu verwenden, aber andere Spalten im Index in einem weniger effizienten Zugriffspfad bekannt als Skip-Scan verwenden kann.

Die selektiver ist Ihr Index, der am schnellsten ist die Forschung.

Stellen Sie sich einfach über ein Telefonbuch: Sie jemanden meist schnell durch Nachnamen finden. Aber wenn Sie eine Menge Leute mit dem gleichen Nachnamen haben, werden Sie mehr Zeit auf der Suche nach der Person halten, indem der Vorname jedes Mal suchen.

So Sie die selektivsten Spalten zunächst zu vermeiden geben müssen so viel wie möglich dieses Problem.

Darüber hinaus sollten Sie dann stellen Sie sicher, dass Ihre Anfragen verwenden richtig, diese „Selektivität Kriterien“.

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