Re: [HACKERS] Slow - grindingly slow - query - Mailing list pgsql-hackers

From The Hermit Hacker
Subject Re: [HACKERS] Slow - grindingly slow - query
Date
Msg-id Pine.BSF.4.10.9911111623200.2296-100000@thelab.hub.org
Whole thread Raw
In response to Slow - grindingly slow - query  (Theo Kramer <theo@flame.co.za>)
List pgsql-hackers
What does:

explain select domain from accountdetail where domain not in (     select domain from accountmaster);

show?

Also, did you do a 'vacuum analyze' on the tables?

Also, how about if you get rid of the views

SELECT domain FROM account
WHERE registrationtype <> 'N';

*shakes head*  am I missing something here?  I'm reading your SELECT and
'CREATE VIEW's and don't they negate each other? *scratch head*

If I'm reading your select properly, and with the amount of sleep I've had
recently, its possible I'm not...

The subselect is saying give me all domains whose registration type = 'N'.
The select itself is saying give me all domains whoe registration type <>
'N' (select accountdetail.domain from accountdetail), and narrow that
listing down further to only include those domains whose registration type
<> 'N'?

Either I'm reading this *totally* wrong, or you satisfy that condition
ujust by doing a 'SELECT domain FROM accountdetail;' ...

No?

On Thu, 11 Nov 1999, Theo Kramer wrote:

> Hi
> 
> I have a single table with two views. The table effectively contains both
> master and detail info (legacy stuff I'm afraid). The query in question is
> used to see if any records exist in the detail that do not exist in the
> master. The table and index definition is as follows
> 
>   create table accounts (
>     domain text,
>     registrationtype char
>     /* Plus a couple of other irrelevant fields */
>   );
> 
>   create index domain_idx on accounts (domain);
>   create index domain_type_idx on accounts (domain, registrationtype);
> 
> The views are
> 
>   create view accountmaster as SELECT * from accounts where registrationtype =
> 'N';
>   create view accountdetail as SELECT * from accounts where registrationtype <>
> 'N';
> 
> The query is
> 
>   select accountdetail.domain from accountdetail where
>     accountdetail.domain not in
>       (select accountmaster.domain from accountmaster);
> 
> I started the query about 5 hours ago and it is still running. I did the same
> on Informix Online 7 and it took less than two minutes...
> 
> My system details are
>   postgres: 6.5.3
>   O/S: RH6.0 Kernel 2.2.5-15smp
> 
> Explain shows the following
> 
>   explain select accountdetail.domain from accountdetail where
>     accountdetail.domain not in
>       (select accountmaster.domain from accountmaster) limit 10;
>   NOTICE:  QUERY PLAN:
> 
>   Seq Scan on accounts  (cost=3667.89 rows=34958 width=12)
>     SubPlan
>       ->  Seq Scan on accounts  (cost=3667.89 rows=33373 width=12)
> 
>   EXPLAIN
> 
> The number of records in the two views are
> 
>   psql -c "select count(*) from accountmaster" coza;
>   count
>   -----
>   45527
>   (1 row)
> 
>   psql -c "select count(*) from accountdetail" coza;
>   count
>   -----
>   22803
> 
> I know of exactly one record (I put it there myself) that satisfies the
> selection criteria.
> 
> Any ideas would be appreciated
> 
> --------
> Regards
> Theo
> 
> PS We have it running live at http://co.za (commercial domains in South Africa).
> 
> ************
> 

Marc G. Fournier                   ICQ#7615664               IRC Nick: Scrappy
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 




pgsql-hackers by date:

Previous
From: Theo Kramer
Date:
Subject: Re: [HACKERS] Indent
Next
From: Hannu Krosing
Date:
Subject: Re: [HACKERS] Slow - grindingly slow - query