Hi Josh,

On Fri, Oct 03, 2003 at 02:07:10PM -0700, Josh Berkus wrote:
> Dror,
> 
> > select articlenumber, channel, description, title, link, dtstamp  from
> >     items, my_channels where items.channel = '22222' and my_channels.id =
> >     '22222' and owner = 'drormata'  and dtstamp > last_viewed and
> >     articlenumber not in (select item from viewed_items where channel
> >     ='22222' and owner = 'drormata');
> 
> the NOT IN is a bad idea unless the subselect never returns more than a 
> handful of rows.  If viewed_items can grow to dozens  of rows, wyou should 
> use WHERE NOT EXISTS instead.  Unless you're using 7.4.
> 

I am using 7.4, and had tried NOT EXISTS and didn't see any
improvements.

> > item_max_date() looks like this:
> >    select max(dtstamp) from items where channel = $1 and link = $2;
> 
> Change it to 
> 
> SELECT dtstamp from iterm where channel = $1 and link = $2
> ORDER BY dtstamp DESC LIMIT 1
> 

Didn't make a difference. And plugging real values into this query as
well as into  the original 
  select max(dtstamp) from items where channel = $1 and link = $2;

and doing an explain analyze shows that the cost is the same. The
strange things is that when I run the above queries by hand they take
about .5 msec. Yet on a resultset that fetches 5 rows, I go up from 15
msec to 300 msec. It would seem like it should be something like 15 +
(0.5 * 5) + small overhead, = 30 msec or so rather than the 300 I'm
seeing.

> and possibly build an index on channel, link, dtstamp

Didn't make a difference either. Explain analyze shows that it didn't
use it.

> 
> -- 
> -Josh Berkus
>  Aglio Database Solutions
>  San Francisco
> 

-- 
Dror Matalon
Zapatec Inc 
1700 MLK Way
Berkeley, CA 94709
http://www.zapatec.com

---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to