From: | The Hermit Hacker <scrappy(at)hub(dot)org> |
---|---|
To: | Theo Kramer <theo(at)flame(dot)co(dot)za> |
Cc: | pgsql-hackers(at)postgreSQL(dot)org |
Subject: | Re: [HACKERS] Slow - grindingly slow - query |
Date: | 1999-11-11 20:33:47 |
Message-ID: | Pine.BSF.4.10.9911111623200.2296-100000@thelab.hub.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)hub(dot)org secondary: scrappy(at){freebsd|postgresql}.org
From | Date | Subject | |
---|---|---|---|
Next Message | Hannu Krosing | 1999-11-11 20:41:31 | Re: [HACKERS] Slow - grindingly slow - query |
Previous Message | Theo Kramer | 1999-11-11 19:53:31 | Re: [HACKERS] Indent |