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