index für uuid Spalten?

Hallo,

ich habe ein performanceproblem mit folgender Tabelle:

CREATE TABLE test
(
  id uuid NOT NULL,
  parent uuid,
  "name" character varying(30),
  CONSTRAINT idpk PRIMARY KEY (id)
)
WITH (OIDS=FALSE);

CREATE INDEX "idxParent"
  ON test
  USING btree
  (parent);

Nun habe ich sehr viele Daten eingefügt und möchte nun folgendes bekommen

select * from test where parent = uuid('49d5599d-edee-472b-aead-bfcaae330c50');

Im Queryplanner kommt

Seq Scan on test  (cost=0.00..31.20 rows=512 width=38)
  Filter: (parent = '49d5599d-edee-472b-aead-bfcaae330c50'::uuid)

Weiß jemand, weshalb pg hier einen seq scan macht und nicht den Index verwendet?

Vielen Dank.

Gruß,
Tobias

Ja, Explain Analyse weiß das. Leider zeigst Du uns das nicht, daher mache ich das mal:

test=*# insert into test(id, parent) select uuid_generate_v4(), uuid_generate_v4() from generate_series(1,10000);
INSERT 0 10000
test=*# explain analyse select * from test where parent = uuid('49d5599d-edee-472b-aead-bfcaae330c50');
                                                     QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on test  (cost=4.41..51.79 rows=21 width=110) (actual time=0.032..0.032 rows=0 loops=1)
   Recheck Cond: (parent = '49d5599d-edee-472b-aead-bfcaae330c50'::uuid)
   ->  Bitmap Index Scan on "idxParent"  (cost=0.00..4.41 rows=21 width=0) (actual time=0.028..0.028 rows=0 loops=1)
         Index Cond: (parent = '49d5599d-edee-472b-aead-bfcaae330c50'::uuid)
 Total runtime: 0.121 ms
(5 rows)

Index-Scan.

Ich rate mal blind: Du hast zu wenig Datensätze in der Tabelle, ein Index-Scan wäre teuer als ein Seq-Scan. Aber das ist nur eine wilde Vermutung…


Andreas

Hallo,

hattest recht, es waren zu wenige Datensätze drin. Vielen Dank.

Tobais