2017-08-01 6 views
0

nur um besser zu verstehen, in welchen Fällen Index richtig verwendet wird, möchte ich mögliche Fälle aufzählen.postgres: wenn Index verwendet wird

nehmen wir an, wir haben eine Tabelle mit "a", "b", "c", "d" Spalten.

schaffen wir einen Index auf (a, b, c, d):

create index my_index on table my_table (a, b, c, d) 

ist es verwendet wird, wenn:

1)

where a=% and b=% and c=% and d=% 

2)

where a=% and b=% 

3)

where a=% 

4)

where b=% and c=% and d=% 

5)

where c=% order by b 

6)

where a=% and b=% and c=% order by case when d is not null then d else c end 

7) nehmen wir an, jetzt sind wir mehr Spalte für die 7-Punkt haben, aber der Index nur auf (a, b, c, d)

where a=% and b=% and c=% and d=% and e=% and f=% and g=% 

Antwort

3

MySQL hat ziemlich gut documentation erklären mehrspaltige Indizes. Die Regeln sind im Grunde die gleichen über Datenbanken (obwohl es etwas fortgeschrittenere Sachen gibt).

Natürlich gibt es andere Faktoren - wie zum Beispiel, was in der from-Klausel passiert, welche Spalten ausgewählt werden, Statistiken über die Tabellen und so weiter.

Hier finden Sie grundlegende Hinweise:

1) where a=% and b=% and c=% and d=%

Ja, solange alle Bedingungen Gleichheit sind. Ich weiß nicht, was mit Kollationskonflikten passiert.

2) wobei a =% und b =%

Ja, solange alle Bedingungen Gleichheit sind. Ich weiß nicht, was mit Kollationskonflikten passiert.

3) wobei a =%

Ja, solange alle Bedingungen Gleichheit sind. Ich weiß nicht, was mit Kollationskonflikten passiert.

4) wobei b =% und c =% und d =%

Wahrscheinlich nicht. Wenn verwendet, müsste der Index gescannt werden. Dies wäre der Fall, wenn der Index die Abfrage abdeckt.

5) wobei c =% Sortieren nach b

Wahrscheinlich nicht.

6) wobei a =% und b =% und c =% Sortieren nach Fall, wenn d nicht null ist, dann d else c

enden sollte für die where Klausel verwendet werden. Eine Sortierung wird weiterhin benötigt.

+1

Es hängt auch von der Verteilung der Werte ab, wenn a nur 2 mögliche Werte hat und es Tausende oder Millionen von Datensätzen gibt, wobei a =% nicht zur Verwendung des Indexes führen kann. – aschoerk

+0

@aschoerk. . . Guter Punkt. Ich habe die Antwort geklärt. –

+0

Entschuldigung, ich habe eine 7) Fallbearbeitung hinzugefügt – 91DarioDev

Verwandte Themen