query plan, index scan cost - Mailing list pgsql-performance
From | Stefan Zweig |
---|---|
Subject | query plan, index scan cost |
Date | |
Msg-id | 721143884@web.de Whole thread Raw |
Responses |
Re: query plan, index scan cost
|
List | pgsql-performance |
hi list, i have a problem with time consuming query. first of all my table structure: CREATE TABLE nw_tla_2008_4_deu ( "ID" bigint NOT NULL, "NET2CLASS" smallint, "FOW" smallint, CONSTRAINT nw_tla_2008_4_deu_pkey PRIMARY KEY ("ID"), ) WITHOUT OIDS; CREATE INDEX nw_tla_2008_4_deu_fow_idx ON nw_tla_2008_4_deu USING btree ("FOW"); CREATE INDEX nw_tla_2008_4_deu_net2class_idx ON nw_tla_2008_4_deu USING btree ("NET2CLASS"); CREATE INDEX nw_tla_2008_4_deu_the_geom_gist ON nw_tla_2008_4_deu USING gist (the_geom gist_geometry_ops); ALTER TABLE nw_tla_2008_4_deu CLUSTER ON nw_tla_2008_4_deu_the_geom_gist; when i run the following query with explain analyze i get the following result: EXPLAIN ANALYZE SELECT nw."ID" AS id FROM nw_tla_2008_4_deu AS nw WHERE expand(st_pointfromtext('POINT(13.7328934 51.049476)',4326), 0.24769615911118054) && nw.the_geom AND nw."FOW" IN (1,2,3,4,10,17) AND nw."NET2CLASS" IN (0,1,2,3) Bitmap Heap Scan on nw_tla_2008_4_deu nw (cost=35375.52..77994.15 rows=11196 width=8) (actual time=13307.830..13368.969 rows=15425loops=1) Recheck Cond: ("NET2CLASS" = ANY ('{0,1,2,3}'::integer[])) Filter: (('0103000020E61000000100000005000000000000C06BF82A40000000A0A0664940000000C06BF82A40000000C009A64940000000E00FF62B40000000C009A64940000000E00FF62B40000000A0A0664940000000C06BF82A40000000A0A0664940'::geometry &&the_geom) AND ("FOW" = ANY ('{1,2,3,4,10,17}'::integer[]))) -> BitmapAnd (cost=35375.52..35375.52 rows=12614 width=0) (actual time=13307.710..13307.710 rows=0 loops=1) -> Bitmap Index Scan on nw_tla_2008_4_deu_the_geom_gist (cost=0.00..1759.12 rows=55052 width=0) (actual time=22.452..22.452rows=52840 loops=1) Index Cond: ('0103000020E61000000100000005000000000000C06BF82A40000000A0A0664940000000C06BF82A40000000C009A64940000000E00FF62B40000000C009A64940000000E00FF62B40000000A0A0664940000000C06BF82A40000000A0A0664940'::geometry &&the_geom) -> Bitmap Index Scan on nw_tla_2008_4_deu_net2class_idx (cost=0.00..33610.55 rows=1864620 width=0) (actual time=13284.121..13284.121rows=2021814 loops=1) Index Cond: ("NET2CLASS" = ANY ('{0,1,2,3}'::integer[])) Total runtime: *13.332* ms running the next query which is only slightly different and has one instead of two and conditions leads to the followingresult EXPLAIN ANALYZE SELECT nw."ID" AS id FROM nw_tla_2008_4_deu AS nw WHERE expand(st_pointfromtext('POINT(13.7328934 51.049476)',4326), 0.24769615911118054) && nw.the_geom AND nw."FOW" IN (1,2,3,4,10,17) Bitmap Heap Scan on nw_tla_2008_4_deu nw (cost=1771.34..146161.54 rows=48864 width=8) (actual time=23.285..99.493 rows=47723loops=1) Filter: (('0103000020E61000000100000005000000000000C06BF82A40000000A0A0664940000000C06BF82A40000000C009A64940000000E00FF62B40000000C009A64940000000E00FF62B40000000A0A0664940000000C06BF82A40000000A0A0664940'::geometry &&the_geom) AND ("FOW" = ANY ('{1,2,3,4,10,17}'::integer[]))) -> Bitmap Index Scan on nw_tla_2008_4_deu_the_geom_gist (cost=0.00..1759.12 rows=55052 width=0) (actual time=22.491..22.491rows=52840 loops=1) Index Cond: ('0103000020E61000000100000005000000000000C06BF82A40000000A0A0664940000000C06BF82A40000000C009A64940000000E00FF62B40000000C009A64940000000E00FF62B40000000A0A0664940000000C06BF82A40000000A0A0664940'::geometry &&the_geom) Total runtime: *109*ms so in both querys there are and conditions. there are two and conditions in the first query and one and condition in thesecond query. unfortunately i am not an expert in reading the postgre query plan. basically i am wondering why in thefirst query a second index scan is done whereas in the second query the second index scan is not done. the second queryruns hundred times faster then first one which surprising to me. any ideas? regards, stefan _________________________________________________________________________ In 5 Schritten zur eigenen Homepage. Jetzt Domain sichern und gestalten! Nur 3,99 EUR/Monat! http://www.maildomain.web.de/?mc=021114
pgsql-performance by date: