Re: [SQL] Joining bug????

Поиск
Список
Период
Сортировка
От Howie
Тема Re: [SQL] Joining bug????
Дата
Msg-id Pine.LNX.3.96.981027184101.589F-100000@brap-eth0.toodarkpark.org
обсуждение исходный текст
Ответ на Re: [SQL] Joining bug????  ("Gene Selkov Jr." <selkovjr@mcs.anl.gov>)
Ответы Re: [SQL] Joining bug????  (jwieck@debis.com (Jan Wieck))
Список pgsql-sql
On Mon, 26 Oct 1998, Gene Selkov Jr. wrote:

>
> > I've been attempting to get my DB tuned to handle joins as best as
> > possible. However, no matter which way I try to perform the joins, if I
> > attempt to join more than two or three tables the joins becomes
> > unbearably long not matter how many indexes I create in however many ways.
>
> Ditto. Never saw a quadruple join succeed, even with relatively small tables.

Ive been playing with the idea of moving a client from MySQL to Postgres (
views, triggers, and subselects would _really_ make my life easier ).

---[ CUT ]---
SELECT
        account.accnum,
        account.accname,
        ((customers.firstname || ' ') || customers.lastname) as Customer,
        acctype.descr,
        account.balance,
        account.status,
        billdate.next
FROM
        account,customers,acctype,billdate
WHERE
        account.custnum=customers.custnum AND
        account.acctype=acctype.accid AND
        account.accnum=billdate.accnum AND
        account.accnum<20
ORDER BY
        account.accnum
---[ CUT ]---

works perfectly, takes about 2 seconds to complete.  granted i have
( sometimes unique ) indexes on all the join columns.

account has 7k rows, customers has 5k rows, acctype has 12 rows,
billdate has 7k rows.

a somewhat modified, real-world query ends up crashing postgres, though:

---[ CUT ]---
select
        account.accnum,
        account.accname,
        account.totalfee,
        billdate.next,
        ((customers.firstname || ' ') || customers.lastname) as Customer,
        customers.company,
        customers.street,
        acctype.yearly
FROM
        account,customers,acctype,billdate
where
        account.totalfee>0.00 AND
        billtype=1 OR (billcc1stmo=1 AND account.created=billdate.last)
AND
        balance<>0.00 AND
        billdate.next>='1998-01-01' AND
        billdate.next<='1998-01-05' AND
        account.status<>'C' AND
        billdate.accnum=account.accnum AND
        account.custnum=customers.custnum AND
        account.acctype=acctype.accid
---[ CUT ]---


> > My only solution was to create a hybrid table that contains the join of
> > all of the tables I'm searching on with multi-keyed indexes. This is a
> > VERY kludgy solution that makes changing the keys to my DB hard to change.
>
> The solution I use may be the worst imaginable kludge, but it works
> great: I do the joins (as well as other set operations) on the client
> side. Perl hashes are very good for that.

try making a view.  from what others have said, views save the query plan
and have usually, at least for me, been _alot_ faster than normal queries.

---
Howie <caffeine@toodarkpark.org>   URL: http://www.toodarkpark.org
        "Oh my god, they killed init!  YOU BASTARDS!"


В списке pgsql-sql по дате отправления:

Предыдущее
От: David Hartwig
Дата:
Сообщение: Re: [SQL] Joining bug????
Следующее
От: "Jackson, DeJuan"
Дата:
Сообщение: RE: [SQL] Joining bug????