Re: Index lookup on > and < criteria

Поиск
Список
Период
Сортировка
От A. Kretschmer
Тема Re: Index lookup on > and < criteria
Дата
Msg-id 20051101191200.GA2934@webserv.wug-glas.de
обсуждение исходный текст
Ответ на Index lookup on > and < criteria  (David Durham <ddurham@vailsys.com>)
Список pgsql-sql
am  01.11.2005, um 12:18:19 -0600 mailte David Durham folgendes:
> Apologies if this questions is asked often.  I'm doing some select 
> statements based on a timestamp field.  I have an index on the field, and 
> when I use the '=' operator the index is used.  However, if I use the '>' 
> or '<' operators, then it does a full table scan.  I've got around 6 
> million rows, so I would think that an index scan would be more 
> appropriate.
> 
> 
> Here are the statements I'm looking at:
> 
>     select * from myTable where myTimeStamp = '10/1/2005';
> 
> uses an index.
> 
>     select max(myTimeStamp) from myTable;
>     select * from myTable where myTimeStamp < '10/2/2005';
>     select * from myTable where myTimeStamp < '10/2/2005' and myTimeStamp
>         >= '10/1/2005';
> 
> do not use indexes.  Can anyone point me to some info about what's going 
> on?  I've started reading through the manual (chapter 13) which I think 

Nice question. My guess:

The planner fels its better to use seq-scan. My test:

,----[  Test  ]
| Produktionsreport=# explain select * from bde_meldungen where zeitpunkt > '2005-08-30'::timestamp;
|                                  QUERY PLAN
| ----------------------------------------------------------------------------
|  Seq Scan on bde_meldungen  (cost=0.00..33862.46 rows=55106 width=139)
|    Filter: (zeitpunkt > '2005-08-30 00:00:00'::timestamp without time zone)
| (2 Zeilen)
|
| Produktionsreport=# explain select * from bde_meldungen where zeitpunkt > '2005-09-30'::timestamp;
|                                         QUERY PLAN
| -------------------------------------------------------------------------------------------
|  Index Scan using bde_zeitpunkt on bde_meldungen  (cost=0.00..8255.23 rows=9521 width=139)
|    Index Cond: (zeitpunkt > '2005-09-30 00:00:00'::timestamp without time zone)
| (2 Zeilen)
`----

Sorry about the german column names, 'zeitpunkt' is a timestamp. On the
first query the result set is estimeted 55.000 rows long -> seq-scan.
The second test: estimated to rows=9521 -> index scan.


Btw.: min/max cant use index, this is coming with 8.1. I'm using for
examples above 7.4.6.


PS.: you can use set ..., example:

,----[  Test with set enable_seqscan=... ]
| Produktionsreport=# set enable_seqscan=on;
| SET
| Produktionsreport=# explain analyse select * from bde_meldungen where zeitpunkt > '2005-08-30'::timestamp;
|                                                         QUERY PLAN
|
---------------------------------------------------------------------------------------------------------------------------
|  Seq Scan on bde_meldungen  (cost=0.00..33862.46 rows=55106 width=139) (actual time=2574.004..4892.563 rows=99915
loops=1)
|    Filter: (zeitpunkt > '2005-08-30 00:00:00'::timestamp without time zone)
|  Total runtime: 4971.179 ms
| (3 Zeilen)
|
| Produktionsreport=# set enable_seqscan=off;
| SET
| Produktionsreport=# explain analyse select * from bde_meldungen where zeitpunkt > '2005-08-30'::timestamp;
|                                                                   QUERY PLAN
|
-----------------------------------------------------------------------------------------------------------------------------------------------
|  Index Scan using bde_zeitpunkt on bde_meldungen  (cost=0.00..47679.39 rows=55106 width=139) (actual
time=57.387..1649.591rows=99915 loops=1)
 
|    Index Cond: (zeitpunkt > '2005-08-30 00:00:00'::timestamp without time zone)
|  Total runtime: 1729.420 ms
| (3 Zeilen)
`----


Now it using the index _and_ it is faster!


HTH, Andreas
-- 
Andreas Kretschmer    (Kontakt: siehe Header)
Heynitz:  035242/47212,      D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net===    Schollglas Unternehmensgruppe    === 


В списке pgsql-sql по дате отправления:

Предыдущее
От: David Durham
Дата:
Сообщение: Index lookup on > and < criteria
Следующее
От: Michael Fuhr
Дата:
Сообщение: Re: Index lookup on > and < criteria