Ich habe eine Tabelle mit einem mehrspaltigen Index, und ich habe Zweifel an der richtigen Sortierung der Indizes, um die maximale Leistung bei den Abfragen zu erzielen.
Das Szenario:
PostgreSQL 8.4, Tabelle mit ungefähr einer Million Zeilen
Werte in Spalte c1 können ungefähr 100 verschiedene Werte haben . Wir können davon ausgehen, dass die Werte gleichmäßig verteilt sind, sodass wir für jeden möglichen Wert ungefähr 10000 Zeilen haben.
Spalte c2 kann 1000 verschiedene Werte haben . Wir haben 1000 Zeilen für jeden möglichen Wert.
Bei der Suche nach Daten enthält die Bedingung immer Werte für diese beiden Spalten, sodass die Tabelle einen mehrspaltigen Index enthält, der c1 und c2 kombiniert. Ich habe darüber gelesen, wie wichtig es ist , die Spalten in einem mehrspaltigen Index richtig anzuordnen, wenn Sie bei Abfragen nur eine Spalte zum Filtern verwenden. Dies ist in unserem Szenario nicht der Fall.
Meine Frage ist diese:
Könnte ich angesichts der Tatsache, dass einer der Filter einen viel kleineren Datensatz auswählt, die Leistung verbessern, wenn der erste Index der selektivste ist (derjenige, der einen kleineren Datensatz zulässt)? Ich hatte diese Frage erst in Betracht gezogen, als ich die Grafiken aus dem Artikel sah, auf den verwiesen wurde:
Bild aus dem referenzierten Artikel über mehrspaltige Indizes .
Die Abfragen verwenden Werte aus den beiden Spalten zum Filtern. Ich habe keine Fragen mit nur einer Spalte zum Filtern. Alle von ihnen sind: WHERE c1=@ParameterA AND c2=@ParameterB
. Es gibt auch Bedingungen wie diese:WHERE c1 = "abc" AND c2 LIKE "ab%"