bad join performance

Поиск
Список
Период
Сортировка
От pginfo
Тема bad join performance
Дата
Msg-id 3F40E9A9.12AE5D55@t1.unisoftbg.com
обсуждение исходный текст
Ответы Re: bad join performance  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: bad join performance  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Список pgsql-performance
Hi ,
I am using pg 7.3.3 on RH 7.3,
dual Athlon
1 GB RAM.

I have 2 tables a_acc and a_vid_doc (all PK are int).

sizes:

 select count(IDS) from a_acc;
  count
---------
 1006772

select count(IDS) from a_vid_doc;
 count
-------
    25

I have problem with the join ot this tables.
I tryed this examples:

 explain analyze select G.IDS  from A_ACC G   join A_VID_DOC VD
ON(G.IDS_VID_DOC=VD.IDS)  WHERE G.IDS = 1338673 ;
                                                               QUERY
PLAN

-----------------------------------------------------------------------------------------------------------------------------------------

 Merge Join  (cost=1.83..1.97 rows=1 width=12) (actual
time=40.78..2085.82 rows=1 loops=1)
   Merge Cond: ("outer".ids_vid_doc = "inner".ids)
   ->  Index Scan using i_a_acc_ids_vid_doc on a_acc g
(cost=0.00..43706.42 rows=1 width=8) (actual time=40.52..2085.55 rows=1
loops=1)
         Filter: (ids = 1338673)
   ->  Sort  (cost=1.83..1.89 rows=25 width=4) (actual time=0.22..0.22
rows=25 loops=1)
         Sort Key: vd.ids
         ->  Seq Scan on a_vid_doc vd  (cost=0.00..1.25 rows=25 width=4)

(actual time=0.05..0.07 rows=25 loops=1)
 Total runtime: 2085.93 msec
(8 rows)


and

 explain analyze select G.IDS  from A_ACC G , A_VID_DOC VD where
G.IDS_VID_DOC=VD.IDS  and  G.IDS = 1338673 ;
                                                               QUERY
PLAN

-----------------------------------------------------------------------------------------------------------------------------------------

 Merge Join  (cost=1.83..1.97 rows=1 width=12) (actual
time=40.91..2099.13 rows=1 loops=1)
   Merge Cond: ("outer".ids_vid_doc = "inner".ids)
   ->  Index Scan using i_a_acc_ids_vid_doc on a_acc g
(cost=0.00..43706.42 rows=1 width=8) (actual time=40.65..2098.86 rows=1
loops=1)
         Filter: (ids = 1338673)
   ->  Sort  (cost=1.83..1.89 rows=25 width=4) (actual time=0.22..0.22
rows=25 loops=1)
         Sort Key: vd.ids
         ->  Seq Scan on a_vid_doc vd  (cost=0.00..1.25 rows=25 width=4)

(actual time=0.05..0.07 rows=25 loops=1)
 Total runtime: 2099.24 msec
(8 rows)

From time to time the second one is very slow (15-17 sek).

If I execute:

 explain analyze select G.IDS  from A_ACC G where  G.IDS = 1338673 ;
                                                    QUERY PLAN
------------------------------------------------------------------------------------------------------------------

 Index Scan using a_acc_pkey on a_acc g  (cost=0.00..3.13 rows=1
width=4) (actual time=0.06..0.06 rows=1 loops=1)
   Index Cond: (ids = 1338673)
 Total runtime: 0.11 msec
(3 rows)

, all is working well.

How can I find the problem?
I have index on A_ACC.IDS_VID_DOC and have vacuum full analyze;
Will it help if I make A_ACC.IDS_VID_DOC not null ?

My problem is that I will execute this query many times and ~ 2 sek  is
very slow for me.

Many thanks and best regards,
ivan.



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

Предыдущее
От: "Shridhar Daithankar"
Дата:
Сообщение: Re: Insert performance
Следующее
От: "Shridhar Daithankar"
Дата:
Сообщение: Re: Insert performance