Wrong Query Plan

Поиск
Список
Период
Сортировка
От Prasanth
Тема Wrong Query Plan
Дата
Msg-id 42724C43.6060709@nqadmin.com
обсуждение исходный текст
Список pgsql-bugs
Below if the query plan that postgres is generating. The troubling part is the
sequential scan on fund_data table. This table has close to million records. It
started doing this from yesterday.

We have added lot of data in allocation_data & transfer_data tables.

If I have just sub query 1 or sub query 2 then it is doing a index scan on
fund_data table but as soon as I add the union it is doing a sequential scan.



EXPLAIN SELECT fund_data.fund_id FROM fund_data WHERE fund_data.fund_id IN
((SELECT allocation_data.fund_id  FROM allocation_data, allocation_lists WHERE
allocation_lists.allocation_id = allocation_data.allocation_id  AND
allocation_lists.account_id=23338) UNION (SELECT transfer_data.target_fund_id as
fund_id FROM transfer_data WHERE transfer_data.account_id=23338));
                                                                           QUERY
PLAN

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 Hash Join  (cost=97.73..157055.63 rows=138696 width=4)
   Hash Cond: ("outer".fund_id = "inner".fund_id)
   ->  Seq Scan on fund_data  (cost=0.00..123670.96 rows=6379996 width=4)
   ->  Hash  (cost=97.49..97.49 rows=98 width=4)
         ->  HashAggregate  (cost=97.49..97.49 rows=98 width=4)
               ->  Subquery Scan "IN_subquery"  (cost=95.77..97.24 rows=98 width=4)
                     ->  Unique  (cost=95.77..96.26 rows=98 width=4)
                           ->  Sort  (cost=95.77..96.02 rows=98 width=4)
                                 Sort Key: fund_id
                                 ->  Append  (cost=0.00..92.53 rows=98 width=4)
                                       ->  Subquery Scan "*SELECT* 1"
(cost=0.00..45.69 rows=27 width=4)
                                             ->  Nested Loop  (cost=0.00..45.42
rows=27 width=4)
                                                   ->  Index Scan using
m_all_lists_account_id_idx on allocation_lists  (cost=0.00..11.01 rows=7 width=4)
                                                         Index Cond: (account_id
= 23338)
                                                   ->  Index Scan using
m_all_data_all_list_id_idx on allocation_data  (cost=0.00..4.84 rows=6 width=8)
                                                         Index Cond:
("outer".allocation_id = allocation_data.allocation_id)
                                       ->  Subquery Scan "*SELECT* 2"
(cost=0.00..46.84 rows=71 width=4)
                                             ->  Index Scan using
m_trans_data_account_id_idx on transfer_data  (cost=0.00..46.13 rows=71 width=4)
                                                   Index Cond: (account_id = 23338)
(19 rows)

Thanks,
-Prasanth.

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: BUG #1637: age() function is giving different results
Следующее
От: Damir Bijuklic
Дата:
Сообщение: Win1250 database under linux