Indexverwendung in PostgreSQL

Status
Für weitere Antworten geschlossen.

MDDaniel

SQL-Guru
Beiträge
116
Hallo
Ich bin erst seit kurzem auch auf PostgreSQL unterwegs und habe eine Verständnisfrage:

Verwendet der PostgreSQL zur Auswahl des passensten Indexes bei einer Abfrage auch Statistiken?
Wenn ja, gibt es eine Möglichkeit den Inhalt einer solchen Statistik aufzulisten?

Gruß MDD
 
Werbung:
Ja, es gibt einen VIEW pg_stats:

Code:
test=*# \d pg_stats
                     View "pg_catalog.pg_stats"
         Column         |   Type   | Collation | Nullable | Default
------------------------+----------+-----------+----------+---------
 schemaname             | name     |           |          |
 tablename              | name     |           |          |
 attname                | name     |           |          |
 inherited              | boolean  |           |          |
 null_frac              | real     |           |          |
 avg_width              | integer  |           |          |
 n_distinct             | real     |           |          |
 most_common_vals       | anyarray |           |          |
 most_common_freqs      | real[]   |           |          |
 histogram_bounds       | anyarray |           |          |
 correlation            | real     |           |          |
 most_common_elems      | anyarray |           |          |
 most_common_elem_freqs | real[]   |           |          |
 elem_count_histogram   | real[]   |           |          |

Außerdem kann man, wenn man weiß, daß es zwischen 2 oder mehr Spalten einen logischen Zusammenhang gibt, mit CREATE STATISTICS noch eigene erstellen. Sollten die Statistiken zu ungenau sein (default statistic target ist 100) kann das global (nicht zu empfehlen) oder je Tabellenspalte auf bis zu 10000 erhöht werden.
 
Zuerst Danke für die Info!
Hilft mir mal schon weiter. Irgendwann krieg ich den Durchblick mit den System Views.

Das heißt standardmäßig beinhaltet die Statistik 100 Werte bzw. Abstufungen, quasi Prozentschritte zwischen den Werten, mit dem jeweiligen Wert an Zeilen in diesem Bereich?!

Ich arbeite hier noch auf einem Testsystem mit der Version 9.6.
Mir ist aufgefallen dass in der View für jede Spalte in meiner Tabelle eine Statistik da ist, allerdings keine die explizit für den Index da wäre. Ist das normal so?
Heißt dass, das die Engine alle Statistiken für die gefilterten Spalten hernimmt und dann den Index mit der effizientesten Reihenfolge auswählt (gegebenenfalls auch keinen)?
 
Heißt dass, das die Engine alle Statistiken für die gefilterten Spalten hernimmt und dann den Index mit der effizientesten Reihenfolge auswählt (gegebenenfalls auch keinen)?

Exakt.

In pg_stat_user_indexes kannst Du auch sehen, welcher Index wie oft verwendet wurde, die Indexnutzung kannst Du via EXPLAIN / EXPLAIN ANALYSE kontrollieren. Beachte, daß bei kleinen Tabellen SeqScan billiger ist als IndexScan und Indexe daher (bei kleinen Tabellen) u.U. nicht verwendet werden.
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben