Ist die Reihenfolge der Felder in der SELECT-Abfrage bei Verwendung der zusammengesetzten Indizierung von Bedeutung?

7

Ich verstehe, dass die Reihenfolge der Spalten im Index selbst von enormer Bedeutung ist. Was ist jedoch mit der Reihenfolge der Spalten in den nachfolgenden SELECT-Abfragen, die diesen Index verwenden?

Wenn ich beispielsweise einen mehrspaltigen Index habe [:col_1, :col_2, :col_3], muss meine SELECT-Anweisung so aussehen "SELECT * FROM my_table WHERE col_1 = (?), col_2 = (?), col_3 = (?)", damit die Abfrage optimiert werden kann? Oder kann ich die Parameter in beliebiger Reihenfolge angeben und das Abfrageoptimierungsprogramm übernimmt dies?

Ich habe einige ähnliche Antworten gelesen , aber es schien keine endgültige Antwort zu geben, die auf Dokumentation hinwies und relativ zu Indizes antwortete. Einige Antworten sagen "es sollte keine Rolle spielen" oder "Wirkung ist vernachlässigbar".

Ich arbeite mit RoR / ActiveRecord an PostgreSQL, aber die Frage ist wirklich für jede SQL / relationale Datenbank.

Sean
quelle

Antworten:

11

Nein, Sie können die 'Parameter' (die Teile der whereKlausel) in beliebiger Reihenfolge angeben , und das Abfrageoptimierungsprogramm übernimmt dies. Der Optimierer führt die Filterung in der Reihenfolge durch, in der er sie für am effizientesten hält. Beachten Sie jedoch, dass dies komplexer ist als nur die Auswahl der zu filternden Reihenfolge: Die Filterung kann beispielsweise vor oder nach dem Beitritt erfolgen.

Sie können dies nicht genau beweisen, aber Sie können zeigen, dass es für eine bestimmte Abfrage gilt, indem Sie experimentieren und prüfen, ob sich der Plan ändert. Es kann sogar wahr sein , dass es Grenzfälle , wo die Ordnung tut Sache, aber mein Rat wäre, die Möglichkeit zu ignorieren und annehmen , dass es nie als sonst passiert dir viel Mühe verschiedenen Permutationen versucht wird aufwenden. Es ist viel besser, sich auf die Art der Abstimmung zu konzentrieren, von der Sie wissen, dass sie sich auszahlt (z. B. korrekte Indizierung).

Jack sagt, versuchen Sie es mit topanswers.xyz
quelle
Ah, nicht eine „endgültige“ Antwort, wieder ! Wie enttäuschend. Ich fürchte, wir sind damit noch nicht fertig und müssen mit weiteren Fragen rechnen. :) Wie auch immer, ich weiß wirklich zu schätzen, wie sich solche "unbestimmten" Antworten gegenseitig bestätigen. Also danke von mir und +1!
Andriy M