Re: INDEX suggestion needed

Поиск
Список
Период
Сортировка
От Frank Bax
Тема Re: INDEX suggestion needed
Дата
Msg-id 5.1.1.6.0.20021211141959.0320bec0@pop6.sympatico.ca
обсуждение исходный текст
Ответ на Re: INDEX suggestion needed  (Thomas Beutin <tyrone@laokoon.IN-Berlin.DE>)
Список pgsql-general
At 02:09 PM 12/11/02, Thomas Beutin wrote:

>On Wed, Dec 11, 2002 at 01:58:59PM -0500, Frank Bax wrote:
> > At 01:43 PM 12/11/02, Thomas Beutin wrote:
> >
> > >Hi,
> > >
> > >i need some help or suggestions for performance increasing on my queries.
> > >My version: PostgreSQL 7.2.1 on i686-pc-linux-gnu, compiled by GCC 2.95.3
> > >
> > >My table is:
> > >
> > >CREATE TABLE "stat_pages" (
> > >         "visit" timestamp with time zone,
> > >         "script_id" integer,
> > >         "a_id" character(30),
> > >         "p_id" character(30),
> > >         "m_id" smallint,
> > >         "s_id" smallint,
> > >         "session_id" character(50),
> > >         "action" character(20)
> > >);
> > >This table contains 343554 rows and i have the following index:
> > >CREATE INDEX "stat_pages_m_id_idx" on "stat_pages" using btree ( "m_id"
> > >"int2_ops" );
> > >
> > >i cannot create an index like this:
> > >CREATE INDEX "stat_pages_datum_idx" on "stat_pages" ( date ("visit") );
> > >The error is about the »iscachable« tag of the index function.
> > >
> > >The table is vacuumed full analyzed.
> > >
> > >My typical queries are like that:
> > >SELECT count(a_id) AS count
> > >   FROM (
> > >     SELECT DISTINCT a_id FROM stat_pages
> > >       WHERE m_id = '35'
> > >         AND visit >= '2002-09-01'
> > >         AND visit <= '2002-09-30'
> > >   ) AS foo;
> >
> >
> > Does this trigger use of index?
> >          visit >= '2002-09-01'::timestamp AND visit <=
> '2002-09-30'::timestamp
>
>no, does not :-( but there is no index on visit.


So add an index on "visit" - but forget trying to make it a 'date' index.
         CREATE INDEX "stat_pages_datum_idx" on "stat_pages" ( "visit" );
Instead of trying to make the index match the constants in your query, just
cast the constants in your query match the index.

On second glance, I've noticed something else.  I seem to remember seeing
question like this one before... and the suggested fix... create an index
on two fields (m_id, visit) and rewrite the query:

WHERE m_id >= '35' AND visit >= timestamp('2002-09-01') AND m_id <= '35'
AND visit <= timestamp('2002-09-30')

Frank

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

Предыдущее
От: Neil Conway
Дата:
Сообщение: Re: Automatic backup with password
Следующее
От: Justin Clift
Дата:
Сообщение: Re: Recovery Mode