RE: [SQL] Joining bug????

Поиск
Список
Период
Сортировка
От Jackson, DeJuan
Тема RE: [SQL] Joining bug????
Дата
Msg-id F10BB1FAF801D111829B0060971D839F4ABB30@cpsmail
обсуждение исходный текст
Список 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
try:         (billdate.billtype=1 OR (billdate.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 по дате отправления:

Предыдущее
От: Howie
Дата:
Сообщение: Re: [SQL] Joining bug????
Следующее
От: pierre
Дата:
Сообщение: Re: [SQL] Joining bug????