Do not understand high estimates of index scan vs seq scan

Поиск
Список
Период
Сортировка
От Antonio Goméz Soto
Тема Do not understand high estimates of index scan vs seq scan
Дата
Msg-id 51C307DC.2030901@gmail.com
обсуждение исходный текст
Ответы Re: Do not understand high estimates of index scan vs seq scan  (Jeff Janes <jeff.janes@gmail.com>)
Список pgsql-general
Hi all,

I do not understand why postgreSQL estimates an index scan only half as fast as a seq scan:

system=# explain select * from queuelog;                            QUERY PLAN
-------------------------------------------------------------------
 Seq Scan on queuelog  (cost=0.00..20530.29 rows=610929 width=148)
(1 row)

system=# explain select * from queuelog where queuelog.start_time >= '2013-05-20 8:30' and queuelog.start_time <=
'2013-06-2117:0'; 
                                                                        QUERY PLAN

-----------------------------------------------------------------------------------------------------------------------------------------------------------
 Index Scan using queuelog_start_time on queuelog  (cost=0.00..13393.18 rows=316090 width=148)
   Index Cond: ((start_time >= '2013-05-20 08:30:00+02'::timestamp with time zone) AND (start_time <= '2013-06-21
17:00:00+02'::timestampwith time zone)) 


Is that solely because it nees to compare each index value to a fixed date/time?
I would assume the index would be much smaller then the actual data, or is it only based on the amount of rows?


Thanks,
Antonio


PS: here's the queuelog definition:

                                       Table "public.queuelog"
      Column      |           Type           |                       Modifiers
------------------+--------------------------+-------------------------------------------------------
 id               | integer                  | not null default nextval('queuelog_id_seq'::regclass)
 created          | timestamp with time zone | not null default now()
 lastupdate       | timestamp with time zone | not null default now()
 start_time       | timestamp with time zone | not null default now()
 sessionid        | character varying(50)    | not null default ''::character varying
 call_seq         | integer                  | not null default 1
 queue            | integer                  | not null default 1
 dial             | character varying(24)    | not null default ''::character varying
 agent            | integer                  | not null default 1
 agents           | integer                  | not null default 0
 agents_logged_in | integer                  | not null default 0
 agents_avail     | integer                  | not null default 0
 queue_pos        | integer                  | not null default 1
 waittime         | numeric                  | not null default (0)::numeric
 ringtime         | numeric                  | not null default (0)::numeric
 talktime         | numeric                  | not null default (0)::numeric
 cause            | integer                  | not null default 16
 from_function    | character varying(24)    |
 from_lookupid    | integer                  | not null default 1
 to_function      | character varying(24)    |
 to_lookupid      | integer                  | not null default 1
 maxcallers       | integer                  | not null default 0
Indexes:
    "queuelog_pkey" PRIMARY KEY, btree (id)
    "queuelog_start_time" btree (start_time)


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

Предыдущее
От: David Johnston
Дата:
Сообщение: Re: Exporting Data
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Exporting Data