PostgreSQL: Warum benutzt diese einfache Abfrage nicht den Index?

8

Ich habe eine Tabelle t mit einer Spalte c, die ein int ist und einen btree-Index hat.

Warum verwendet die folgende Abfrage diesen Index nicht?

%Vor%

Das Ergebnis ist:

%Vor%

Mein Verständnis von Indizes ist begrenzt, aber ich dachte, solche Abfragen waren der Zweck von Indizes.

    
David 04.02.2011, 22:43
quelle

3 Antworten

4

Die Abfrage kann sicherlich einen Index verwenden. Der Grund, dass es in Ihrem speziellen Fall nicht hängt, hängt von der besonderen Größe und Verteilung der Daten ab. Sie können SET enable_seqscan TO off zur Untersuchung verwenden.

    
Peter Eisentraut 06.02.2011, 20:31
quelle
5

Diese Abfrage kann mit einer Optimierung durchgeführt werden, die als loose index scan bezeichnet wird. PostgreSQL implementiert diese Optimierung jedoch noch nicht, so dass stattdessen eine Tabellensuche verwendet wird.

Von den wichtigsten Datenbanken habe ich, soweit ich weiß, nur lose implementiert. MySQL Index-Scan (vielleicht auch Oracle?). PostgreSQL hat diese Funktion nicht implementiert .

    
Mark Byers 04.02.2011 23:21
quelle
3

Da die gesamte Tabelle gescannt werden muss, ist dies über den Index nicht von Vorteil. ("Covering-Indizes" sind aufgrund ihrer MVCC-Implementierung nicht als Performance-Technik in PostgreSQL geeignet).

    
araqnid 04.02.2011 22:52
quelle