tricking EXPLAIN?

From: Wim Bertels <wim(dot)bertels(at)khleuven(dot)be>
To: <pgsql-general(at)postgresql(dot)org>
Subject: tricking EXPLAIN?
Date: 2011-11-28 11:55:54
Message-ID: 1322481354.2425.49.camel@zwerfkat
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hallo,

if u compare the 2 queries, then they should be equivalent:

-- normal
-- EXPLAIN ANALYZE
SELECT amproc, amprocnum - average AS difference
FROM pg_amproc,
(SELECT avg(amprocnum) AS average
FROM pg_amproc) AS tmp;

-- trying to trick explain with a redundant join
-- EXPLAIN ANALYZE
SELECT amproc, amprocnum - average AS difference
FROM pg_amproc INNER JOIN
(SELECT avg(amprocnum) AS average
FROM pg_amproc) AS tmp
ON pg_amproc.amproc = pg_amproc.amproc;

If we look at the output of EXPLAIN ANALYZE,
then according to the COST the second query is best one,
but according to the ACTUAL TIME the first query is best
(which seems logical intuitively).

So explain is being tricked,
and the reason for this seems the number of rows in de nested loop,
which are reduced to 1 for explain because of the join.
http://www.postgresql.org/docs/8.4/static/using-explain.html

Suggestions, comments are always welcome.

mvg,
Wim Bertels

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Szymon Guz 2011-11-28 12:00:22 Re: tricking EXPLAIN?
Previous Message Condor 2011-11-28 11:31:48 Re: How to add conversion between LATIN1 and WIN1251 ?