Re: [SQL] questions on interpreting the output of explain

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: molivier(at)yahoo(dot)com (Michael Olivier)
Cc: pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] questions on interpreting the output of explain
Date: 1999-02-20 06:06:48
Message-ID: 199902200606.BAA10867@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

> I'm trying to optimize a query and don't yet understand PostGreSQL's
> query optimization... I'm not sure how to read it in terms of best
> outcome. On a query that looks like:
>
> explain select U.oid from users U, selections S where
> U.acctname = S.acctname and
> U.birthdate <= '1-1-1963' and
> U.birthdate >= '1-1-1933' and
> 38 >= S.field1_int and
> 38 <= S.field2_int and
> U.tol_a < 99.0 and
> U.tol_b < 99.0
>
> (indexes on: U.birthdate, U.acctname, S.acctname, U.tol_a, U.tol_b)
>
> I get:
>
> Nested Loop (cost=9.38 size=1 width=28)
> -> Index Scan on u (cost=3.26 size=3 width=16)
> -> Index Scan on s (cost=2.04 size=25 width=12)
>
> ...but if I shorten the query slightly:
>
> explain select U.oid from users U, selections S where
> U.acctname = S.acctname and
> U.birthdate <= '1-1-1963' and
> U.birthdate >= '1-1-1933' and
> 38 >= S.field1_int and
> 38 <= S.field2_int
>
> ...I get:
>
> Hash Join (cost=14.67 size=3 width=28)
> -> Index Scan on u (cost=3.26 size=26 width=16)
> -> Hash (cost=0.00 size=0 width=0)
> -> Index Scan on s (cost=7.73 size=25 width=12)
>
> Can someone explain the details here to me? I guess specific questions
> are:
> - Does hash join mean my acctname indexes are hashed, not btree'd?

No. It hashes the inner to make the join quicker.

> - What does index scan mean?

Uses an existing index to restrict what rows are used.

> - Nested loop?

compare every row to every other row.

> - Does the cost roll-up, meaning the top line is total cost, and
> rest is a breakdown, or do I add up all the cost numbers?

rolls up.

> - Can I compare costs between two queries?

It picks the cheapest. Go to the web site, go to support, the
documenation, choose the backend flowchart, and click on optimizer. It
will show you a README file that is new for 6.5(not released yet) which
should give you some ideas. The optimizer will be improved for 6.5.

--
Bruce Momjian | http://www.op.net/~candle
maillist(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Oliver Elphick 1999-02-20 08:32:39 Re: [HACKERS] Re: [SQL] SQL-Query 2 get primary key
Previous Message Michael Olivier 1999-02-20 05:19:43 Re: [SQL] SQL-Query 2 get primary key