Skip site navigation (1) Skip section navigation (2)

Optimising queries involving unions

From: Sam Mason <sam(at)samason(dot)me(dot)uk>
To: pgsql-performance(at)postgresql(dot)org
Subject: Optimising queries involving unions
Date: 2005-05-26 15:22:03
Message-ID: (view raw, whole thread or download thread mbox)
Lists: pgsql-performance

I've got a query that I think the query optimiser should be able
to work it's magic on but it doesn't!  I've had a look around and
asked on the IRC channel and found that the current code doesn't
attempt to optimise for what I'm asking it to do at the moment.
Here's a bad example:

  SELECT u.txt
  FROM smalltable t, (
    SELECT id, txt FROM largetable1
    SELECT id, txt FROM largetable2) u
    AND = 'bar';

I was hoping that "smalltable" would get moved up into the union,
but it doesn't at the moment and the database does a LOT of extra
work.  In this case, I can manually do quite a couple of transforms
to move things around and it does the right thing:

  SELECT txt
  FROM (
    SELECT as lid, as rid,, l.txt
      FROM largetable1 l, smalltable r
    SELECT as lid, as rid,, l.txt
      FROM largetable1 l, smalltable r)
  WHERE foo = 'bar';
    AND lid = rid

The optimiser is intelligent enough to move the where clauses up
into the union and end end up with a reasonably optimal query.
Unfortunatly, in real life, the query is much larger and reorganising
everything manually isn't really feasible!

Is this a good place to ask about this or is it more in the realm
of the hackers mailing list?



pgsql-performance by date

Next:From: Brad MightDate: 2005-05-26 15:36:51
Subject: Specific query performance problem help requested - postgresql 7.4
Previous:From: Colton A SmithDate: 2005-05-26 14:57:53
Subject: poor performance involving a small table

Privacy Policy | About PostgreSQL
Copyright © 1996-2017 The PostgreSQL Global Development Group