Обсуждение: Performance on views

Поиск
Список
Период
Сортировка

Performance on views

От
Rickard Sjöström
Дата:
Hi!
I've probably missed somthing but here is my problem.

I have a view that is really slow and I ca easily work around the slowness by bypassing the view and query the real
tabledirectly. 

Example:
--------------------------------------------
From view, the slow one:
SELECT * from my_view WHERE date > 2007-03-01

and to speed it up I just copy the view defintion and inserts some "date > ...", like this.

SELECT *
FROM (select * from my_table where data > 2007-03-01) mt,
         my JOIN someother on mt.id=smoeother.id
         etc,...
--------------------------------------------

The thing here is that I limit the query before joining with other data.

Did I get through with my problem?
Any ideas how I can speed up my views?
Is there something I can tell the database in order to speed up?
Is this a known issue with views?

/Rickard

----------------------------------------------------------------------
Click to lower your debt and consolidate your monthly expenses
http://tags.bluebottle.com/fc/CAaCMPJklAkSFsDVLmOtm1fwWle86ZFg/


Re: Performance on views

От
Tom Lane
Дата:
Rickard =?iso-8859-1?b?U2r2c3Ry9m0=?= <rickard.sjostrom@bluebottle.com> writes:
> I have a view that is really slow and I ca easily work around the slowness by bypassing the view and query the real
tabledirectly. 

Let's see the exact definition of the view and EXPLAIN ANALYZE results
for doing it both ways.  Also, what PG version is this?

            regards, tom lane

PG does not use my index

От
Rickard Sjöström
Дата:
Hi!
This post is related to the post "Performance of views" but this is another problem now.

Problem: PostgreSQL seems to not use my index.

My postgres is 7.4.

I started all over again and got my query really fast on one database (~40 seconds became 150 ms). BUT when trying on
anotherdb (same postgres server but with approx. 4 times as much data) it was really slow again (say 10 seconds).  

Then I run the EXPLAIN ANALYSE of a sub-query of my query which I realize was the problem.

It seems that it does not make use of the index in the slower database!?

fast db:
-------------------------
 ->  Index Scan using testcase_b_bid_index on testcase  (cost=0.00..1656.82 rows=426 width=38) (never executed)"
-------------------------


slow db:
-------------------------
->  Seq Scan on testcase  (cost=0.00..2896.42 rows=33242 width=64) (actual time=77.027..791.014 rows=37093 loops=1)"
-------------------------

rows=37093 is all of the existing rows of table testcase!
(why does it say "never executed"?)

Any ideas why it does not use my index??? How can I convince it to do so?

/Rickard



Citerar Tom Lane <tgl@sss.pgh.pa.us>:

> Rickard =?iso-8859-1?b?U2r2c3Ry9m0=?=
> <rickard.sjostrom@bluebottle.com> writes:
> > I have a view that is really slow and I ca easily work around the
> slowness by bypassing the view and query the real table directly.
>
> Let's see the exact definition of the view and EXPLAIN ANALYZE
> results
> for doing it both ways.  Also, what PG version is this?
>
>             regards, tom lane
>

----------------------------------------------------------------------
Need cash? Click to get an emergency loan, bad credit ok
http://tags.bluebottle.com/fc/CAaCMPJe8z3dVmZgRfajsIJMkopwDwDI/


Re: PG does not use my index

От
Federico
Дата:
On 4/2/07, Rickard Sjöström <rickard.sjostrom@bluebottle.com> wrote:
> Hi!
> This post is related to the post "Performance of views" but this is another problem now.
>
> Problem: PostgreSQL seems to not use my index.
>
> My postgres is 7.4.
>
> I started all over again and got my query really fast on one database (~40 seconds became 150 ms). BUT when trying on
anotherdb (same postgres server but with approx. 4 times as much data) it was really slow again (say 10 seconds). 
>
> Then I run the EXPLAIN ANALYSE of a sub-query of my query which I realize was the problem.
>
> It seems that it does not make use of the index in the slower database!?
>
> fast db:
> -------------------------
>  ->  Index Scan using testcase_b_bid_index on testcase  (cost=0.00..1656.82 rows=426 width=38) (never executed)"
> -------------------------
>
>
> slow db:
> -------------------------
> ->  Seq Scan on testcase  (cost=0.00..2896.42 rows=33242 width=64) (actual time=77.027..791.014 rows=37093 loops=1)"
> -------------------------
>
> rows=37093 is all of the existing rows of table testcase!
> (why does it say "never executed"?)

Hi,
a full index scan is even more expensive than a sequential scan.
So the query optimizer works fine.

Regards
Federico

Re: PG does not use my index

От
Tom Lane
Дата:
Rickard =?iso-8859-1?b?U2r2c3Ry9m0=?= <rickard.sjostrom@bluebottle.com> writes:
> fast db:
> -------------------------
>  ->  Index Scan using testcase_b_bid_index on testcase  (cost=0.00..1656.82 rows=426 width=38) (never executed)"
> -------------------------

> slow db:
> -------------------------
> ->  Seq Scan on testcase  (cost=0.00..2896.42 rows=33242 width=64) (actual time=77.027..791.014 rows=37093 loops=1)"
> -------------------------

Let's see the query and the *whole* explain analyze output, not the part
you (mistakenly) think is important.

            regards, tom lane

Re: PG does not use my index

От
Rickard Sjöström
Дата:
Hi!
I eventually tried with an 'vacuum analyse' which made postgres to use my index and the query was completed in 200 ms
(instedof tens of seconds) and I was happy again! 

Thanks!

/Rickard

Citerar Tom Lane <tgl@sss.pgh.pa.us>:

> Rickard =?iso-8859-1?b?U2r2c3Ry9m0=?=
> <rickard.sjostrom@bluebottle.com> writes:
> > fast db:
> > -------------------------
> >  ->  Index Scan using testcase_b_bid_index on testcase
> (cost=0.00..1656.82 rows=426 width=38) (never executed)"
> > -------------------------
>
> > slow db:
> > -------------------------
> > ->  Seq Scan on testcase  (cost=0.00..2896.42 rows=33242
> width=64) (actual time=77.027..791.014 rows=37093 loops=1)"
> > -------------------------
>
> Let's see the query and the *whole* explain analyze output, not the
> part
> you (mistakenly) think is important.
>
>             regards, tom lane
>