it-swarm.com.de

Warum führt PostgreSQL einen sequentiellen Scan für indizierte Spalten durch?

Sehr einfaches Beispiel - eine Tabelle, ein Index, eine Abfrage:

CREATE TABLE book
(
  id bigserial NOT NULL,
  "year" integer,
  -- other columns...
);

CREATE INDEX book_year_idx ON book (year)

EXPLAIN
 SELECT *
   FROM book b
  WHERE b.year > 2009

gibt mir:

Seq Scan on book b  (cost=0.00..25663.80 rows=105425 width=622)
  Filter: (year > 2009)

Warum wird stattdessen KEIN Index-Scan durchgeführt? Was vermisse ich?

128
Alex Vayda

Haben Sie ANALYSIERT die Tabelle/Datenbank? Und was ist mit dem Statistik ? Wenn es viele Datensätze gibt, deren Jahr> 2009 ist, ist ein sequentieller Scan möglicherweise schneller als ein Index-Scan.

12
Frank Heikens

Beim Index-Scan springt der Lesekopf von einer Zeile zur nächsten, was 1000-mal langsamer ist als beim Lesen des nächsten physischen Blocks (beim sequentiellen Scan).

Wenn die Anzahl der abzurufenden Datensätze (* 1000) geringer ist als die Gesamtzahl der Datensätze, ist die Indexsuche besser.

0
Gaurav Neema