Optimieren Sie den Abfragebereich für Postgres-Zeitstempel

Ich habe folgende Tabelle und Indizes definiert:

CREATE TABLE ticket
(
  wid bigint NOT NULL DEFAULT nextval('tickets_id_seq'::regclass),
  eid bigint,
  created timestamp with time zone NOT NULL DEFAULT now(),
  status integer NOT NULL DEFAULT 0,
  argsxml text,
  moduleid character varying(255),
  source_id bigint,
  file_type_id bigint,
  file_name character varying(255),
  status_reason character varying(255),
  ...
)

Ich habe einen Index für die erstelltcreated Zeitstempel wie folgt:

CREATE INDEX ticket_1_idx
  ON ticket
  USING btree
  (created );

und hier ist meine Frage

select * from ticket 
where created between '2012-12-19 00:00:00' and  '2012-12-20 00:00:00'

Dies hat gut funktioniert, bis die Anzahl der Datensätze zu wachsen begann (ungefähr 5 Millionen) und jetzt dauert es ewig, bis sie zurückkehren.

Die Analyse zu erklären, zeigt Folgendes:

"Index Scan using ticket_1_idx on ticket  (cost=0.00..10202.64 rows=52543 width=1297) (actual time=0.109..125.704 rows=53340 loops=1)"
"  Index Cond: ((created >= '2012-12-19 00:00:00+00'::timestamp with time zone) AND (created <= '2012-12-20 00:00:00+00'::timestamp with time zone))"
"Total runtime: 175.853 ms"

Bisher habe ich versucht einzustellen

random_page_cost = 1.75 
effective_cache_size = 3 

Auch erstellt

create CLUSTER ticket USING ticket_1_idx;

Nichts funktioniert. Was mache ich falsch? Warum wählt es sequentiellen Scan? Die Indizes sollen die Abfrage beschleunigen. Was kann getan werden, um es zu optimieren?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage