Optimizing again

Поиск
Список
Период
Сортировка
От Walt Bigelow
Тема Optimizing again
Дата
Msg-id Pine.LNX.4.02.9810151821020.1653-100000@alice.stimpy.com
обсуждение исходный текст
Список pgsql-sql
Since there were a few posts here on this, I thought I'd ask this
question.

I am trying to do a large 'join' and when I use explain on the following
query it fails to do an index scan on tbladdressdirectory.

explain
    select librarynumber,
    tblmediaformat.mediaformat,
    tblmediatype.mediatype,
    tblmediasize.mediasize,
    tbladdressdirectory.company
    FROM
    tblmedialibrary,
    tblmediaformat,
    tblmediatype,
    tblmediasize,
    tbladdressdirectory
    WHERE
    tblmedialibrary.mediaformatid = tblmediaformat.formatid
    AND tblmedialibrary.mediatypeid = tblmediatype.typeid
    AND tblmedialibrary.mediasizeid = tblmediasize.mediasizeid
    AND tblmedialibrary.fclientid = tbladdressdirectory.agencyid
    AND librarynumber = '9988';

It returns:
NOTICE:  QUERY PLAN:

Hash Join  (cost=57.85 size=31448 width=92)
  ->  Hash Join  (cost=18.32 size=293 width=76)
    ->  Hash Join  (cost=11.69 size=50 width=60)
      ->  Nested Loop  (cost=6.15 size=11 width=44)
         ->  Index Scan on tblmedialibrary  (cost=2.05 size=2 width=2 8)
            ->  Index Scan on tblmediatype  (cost=2.05 size=37 width=16)

    ->  Hash  (cost=0.00 size=0 width=0)
       ->  Seq Scan on tblmediaformat  (cost=2.09 size=33 width=16)
        ->  Hash  (cost=0.00 size=0 width=0)
              ->  Seq Scan on tblmediasize  (cost=1.99 size=30 width=16)
  ->  Hash  (cost=0.00 size=0 width=0)
    ->  Seq Scan on tbladdressdirectory  (cost=17.43 size=316 width=16)

EXPLAIN

But when I do:
explain select company from tbladdressdirectory WHERE agencyid = 350;

I returns:
NOTICE:  QUERY PLAN:

Index Scan on tbladdressdirectory  (cost=2.05 size=2 width=12)

EXPLAIN


Why does the optimizer not do an index scan on tbladdressdirectory when
doing a link?  An index scan seems 12% faster..

Is there some modification to my query that can speed this up?

JUST DID THIS:

Basically tblmedialibrary has 3 fields which are "links" to
tbladdressdirectory.  So, each piece of media can have 3 companies related
to it.

I added to the select: tbladdressdirectory_1.company
and then to FROM: tbladdressdirectory as tbladdressdirectory_1
then the link: tblmedialibrary.aclientid = tbladdressdirectory_1.agencyid

And again it does not do an index search on either tbladdressdirectory
search. I want to be able to grab all the data at once from the database
server, but the time it takes to do all links at once is MUCH greater than
2 or even 3 seperate selects.

This shows to be even slower when specifying multiple librarynumbers.

Oh yeah, the First line returned from explain "Hash Join" goes from
cost=57.85 to cost=958.99 after I added the second tbladdressdirectory
join.  16 times more on the cost with one additional join!

Any insight is appricated!

Thanks,
Walt





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

Предыдущее
От: Craig Orsinger
Дата:
Сообщение: Creating Indexes IP and MAC Data Types (followup)
Следующее
От: "Thomas G. Lockhart"
Дата:
Сообщение: Re: [HACKERS] Re: [SQL] Optimizing perfomance using indexes