Search Postgresql Archives

PG 8.0.1 Does not use Index with IS NOT NULL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hy List,

I have a problem with this Query :
SELECT * FROM lifsch WHERE l_dokunr IS NOT NULL ORDER BY l_dokunr;

CIMSOFT=# ANALYSE lifsch;
ANALYZE

CIMSOFT=# EXPLAIN ANALYSE SELECT * FROM lifsch WHERE l_dokunr IS NULL;
                                                      QUERY PLAN

--------------------------------------------------------------------------------
Index Scan using test on lifsch (cost=0.00..1400.20 rows=372 width=201) (actual time=0.000..0.000 rows=189 loops=1)
Filter: (l_dokunr IS NULL)
Total runtime: 0.000 ms
(3 rows)


ok, thats fine


CIMSOFT=# EXPLAIN ANALYSE SELECT * FROM lifsch WHERE l_dokunr IS NOT NULL; QUERY PLAN

--------------------------------------------------------------------------------
Seq Scan on lifsch (cost=0.00..4469.47 rows=39476 width=201) (actual time=0.000..360.000 rows=40652 loops=1)
Filter: (l_dokunr IS NOT NULL)
Total runtime: 510.000 ms
(3 rows)


not fine but 510ms is ok. (why does the planner do not use the index
"lifsch_dokunr" btree (l_dokunr) WHERE l_dokunr IS NOT NULL)???


CIMSOFT=# EXPLAIN ANALYSE SELECT * FROM lifsch WHERE l_dokunr IS NOT NULL ORDER BY l_dokunr;
QUERY PLAN


--------------------------------------------------------------------------------
Sort (cost=11768.20..11866.89 rows=39476 width=201) (actual time=4837.000..4997.000 rows=40652 loops=1)
Sort Key: l_dokunr
-> Seq Scan on lifsch (cost=0.00..4469.47 rows=39476 width=201) (actual time=0.000..1350.000 rows=40652 loops=1)
Filter: (l_dokunr IS NOT NULL)
Total runtime: 5107.000 ms
(5 rows)


5000ms, thats not fine! ORDER BY seems to slow down everything.

CIMSOFT=# SELECT count(*) FROM lifsch ;
 count
-------
 40841
(1 row)

CIMSOFT=# SELECT count(*) FROM lifsch WHERE l_dokunr IS NULL;
 count
-------
   189
(1 row)


Table definition:

CIMSOFT=# \d lifsch
                                     Table "public.lifsch"
   Column   |         Type          |                        Modifiers

------------+-----------------------+-------------------------------------------
---------------
l_nr | integer | not null default nextval('public.lifsch_l_
nr_seq'::text)
l_krz | character varying(9) | not null
l_krzl | character varying(9) | not null
l_krzf | character varying(9) | not null
l_aknr | character varying(40) | not null
l_ag_id | integer |
l_ldat | date | not null default currenttime()
l_lgort | character varying(50) | not null default ''::character varying
l_lgchnr | character varying(50) | not null default ''::character varying
l_abg_mec | integer | not null
l_abgg | real | not null
l_abgg_uf1 | real |
l_vkp_uf1 | real |
l_vkpbas | real |
l_vkp | real |
l_arab | real |
l_def | boolean |
l_azutx | text |
l_gew | real |
l_versart | character varying(30) |
l_dokunr | integer |
l_bz_bnr | integer |
l_dim1 | real | not null default 0
l_dim2 | real | not null default 0
l_dim3 | real | not null default 0
dbrid | character varying | default nextval('db_id_seq'::text)
Indexes:
"lifsch_pkey" PRIMARY KEY, btree (l_nr)
"lifsch_idindex" UNIQUE, btree (dbrid)
"lifsch_dokunr" btree (l_dokunr) WHERE l_dokunr IS NOT NULL
"lifsch_ldat" btree (l_ldat)
"lifsch_seldoku" btree (l_krzl, l_dokunr)
"test" btree (l_dokunr) WHERE l_dokunr IS NULL


---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
   (send "unregister YourEmailAddressHere" to majordomo@xxxxxxxxxxxxxx)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux