Обсуждение: sequence scan, but indexed tables
Hi!
I have two tables (picmain, and picalbum). Both table has an unique
index filed, which is indexed (this field called "aid" and the indexes
are: picmain_aid_idx, picalbum_aid_idx). But when I execute the query
with simple join, I get this:
explain SELECT picmain.aid from picmain, picalbum where
picmain.aid=picalbum.aid;
NOTICE: QUERY PLAN:
Hash Join (cost=806.71..69631.60 rows=832629 width=8)
-> Seq Scan on picalbum (cost=0.00..14323.29 rows=832629 width=4)
-> Hash (cost=730.57..730.57 rows=30457 width=4)
-> Seq Scan on picmain (cost=0.00..730.57 rows=30457
width=4)
Both table has "relative" many rows (picmain: around 30000, picalbum:
around 800000).
I don't know why postgres use sequence scan, because I have two good
indexes. :)
vacuum, vacuum analyze is done.
I have postgresql 7.0.3 running on Debian GNU/Linux i386.
Thanks.
Zsolt
csernazs@freemail.hu (Cserna Zsolt) writes:
> explain SELECT picmain.aid from picmain, picalbum where
> picmain.aid=picalbum.aid;
> NOTICE: QUERY PLAN:
> Hash Join (cost=806.71..69631.60 rows=832629 width=8)
> -> Seq Scan on picalbum (cost=0.00..14323.29 rows=832629 width=4)
> -> Hash (cost=730.57..730.57 rows=30457 width=4)
> -> Seq Scan on picmain (cost=0.00..730.57 rows=30457
> width=4)
> Both table has "relative" many rows (picmain: around 30000, picalbum:
> around 800000).
Then I'd say the planner is making the right decision.
If you want to experiment, see what plans (and actual runtimes) you get
after turning off enable_hashjoin and/or enable_mergejoin. With both
off you will get a nestloop with inner indexscan ... and I bet you won't
like it.
> I have postgresql 7.0.3 running on Debian GNU/Linux i386.
You do realize that version is quite ancient?
regards, tom lane
[...] > Then I'd say the planner is making the right decision. Yes, the cost is cool, if I turn off enable_hashjoin, I get a very hight cost. But the runtime is smaller (in a bigger query, which have around 20 row on output, and 2-3 subselect and 3-4 join). > > I have postgresql 7.0.3 running on Debian GNU/Linux i386. > > You do realize that version is quite ancient? So, upgrade is strongly recommended? :) Debian package is not so good, the backup script doesn't work (in an earlier debian package). I tried to backup the database (I have daily backup) before upgrading, but restoring from this was too hard for me, because the postgres server didn't started (he/she thinks I haven't got backup :). Regards, and thank you, Zsolt
On Mon, 2002-07-22 at 14:33, Cserna Zsolt wrote: > So, upgrade is strongly recommended? :) Debian package is > not so good, the backup script doesn't work (in an earlier > debian package). I tried to backup the database (I have > daily backup) before upgrading, but restoring from this was > too hard for me, because the postgres server didn't started > (he/she thinks I haven't got backup :). If you have problems with the packaging, please tell me about them. I may well be able to help with the immediate problem; I may also be able to improve the package for the benefit of other users. But I can't do anything about it if I never hear about it. Use the Debian bug reporting system (install the package reportbug). -- Oliver Elphick Oliver.Elphick@lfix.co.uk Isle of Wight, UK http://www.lfix.co.uk/oliver GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C ======================================== "Then Peter and the other apostles answered and said, We ought to obey God rather than men." Acts 5:29