From: | "Gabriele Bartolini" <angusgb(at)tin(dot)it> |
---|---|
To: | "Kris Jurka" <books(at)ejurka(dot)com> |
Cc: | pgsql-performance(at)postgresql(dot)org |
Subject: | Re: Normal case or bad query plan? |
Date: | 2004-10-12 14:29:36 |
Message-ID: | 41536BE0000113F4@ims3d.cp.tin.it |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Hi Kris,
>I believe the problem is that pg's lack of cross-column statistics is
>producing the poor number of rows estimate. The number of rows mataching
I got your point now. I had not understood it last night but it makes really
sense.
>which is roughtly 10% of the table. I imagine the query planner
>believes that the other condition alone will match the other 90% of the
>table. The problem is that it doesn't know that these two ranges'
>intersection is actually tiny. The planner assumes a complete or nearly
>complete overlap so it thinks it will need to fetch 10% of the rows from
Yep, because it performs those checks separately and it gets 10% for one
check and 90% for the other.
As Tom says, I should somehow make PostgreSQL see my data as a single entity
in order to perform a real range check. I will study some way to obtain
it.
However, I got better results by specifying the grane of the statistics
through "ALTER TABLE ... SET STATISTICS".
FYI I set it to 1000 (the maximum) and I reduced the query's estimated time
by the 90% (from 40000ms to 4000ms) although much slower than the index
scan (200ms).
I will play a bit with data types as Tom suggested.
For now, thanks anyone who tried and helped me.
Ciao,
-Gabriele
From | Date | Subject | |
---|---|---|---|
Next Message | Steinar H. Gunderson | 2004-10-12 14:40:54 | Re: Normal case or bad query plan? |
Previous Message | Tom Lane | 2004-10-12 14:07:56 | Re: execute cursor fetch |