Can someone explain the problem with this select - Mailing list pgsql-sql
| From | Richard Ray |
|---|---|
| Subject | Can someone explain the problem with this select |
| Date | |
| Msg-id | Pine.LNX.4.64.0612051316260.20963@rray.drdc.mstc.ms.gov Whole thread Raw |
| Responses |
Re: Can someone explain the problem with this select
Re: Can someone explain the problem with this select Re: Can someone explain the problem with this select |
| List | pgsql-sql |
Allow me to demonstrate my pitiful SQL knowledge
I have tables documents and comments
If I run join and list doc_nums the query is quite fast
If I run join and use subselect the query is extremely slow
Can someone offer analysis
Thanks
Richard
dcc=# EXPLAIN ANALYZE select doc_num from documents limit 10;
QUERYPLAN
----------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..1.01 rows=10 width=13) (actual time=0.013..0.061
rows=10 loops=1) -> Seq Scan on documents (cost=0.00..909333.85 rows=9014885 width=13)
(actual time=0.008..0.027 rows=10 loops=1) Total runtime: 0.125 ms
(3 rows)
dcc=#
dcc=# EXPLAIN ANALYZE select * from documents left outer join comments
on (documents.doc_num = comments.doc_num) where documents.doc_num in
('105364107','105513059','105513095','105513112','105585627','102933195','014650340','014650361','014650362','105419865');
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HashLeft Join (cost=21.23..61.54 rows=10 width=444) (actual
time=0.507..0.574 rows=10 loops=1) Hash Cond: ("outer".doc_num = "inner".doc_num) -> Bitmap Heap Scan on documents
(cost=20.03..60.28 rows=10
width=361) (actual time=0.397..0.432 rows=10 loops=1) Recheck Cond: ((doc_num = '105364107'::bpchar) OR
(doc_num=
'105513059'::bpchar) OR (doc_num = '105513095'::bpchar) OR (doc_num =
'105513112'::bpchar) OR (doc_num = '105585627'::bpchar) OR (doc_num =
'102933195'::bpchar) OR (doc_num = '014650340'::bpchar) OR (doc_num =
'014650361'::bpchar) OR (doc_num = '014650362'::bpchar) OR (doc_num =
'105419865'::bpchar)) -> BitmapOr (cost=20.03..20.03 rows=10 width=0) (actual
time=0.383..0.383 rows=0 loops=1) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.059..0.059 rows=1 loops=1) Index Cond: (doc_num =
'105364107'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.039..0.039 rows=1 loops=1) Index Cond: (doc_num =
'105513059'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.034..0.034 rows=1 loops=1) Index Cond: (doc_num =
'105513095'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.031..0.031 rows=1 loops=1) Index Cond: (doc_num =
'105513112'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.034..0.034 rows=1 loops=1) Index Cond: (doc_num =
'105585627'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.036..0.036 rows=1 loops=1) Index Cond: (doc_num =
'102933195'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.036..0.036 rows=1 loops=1) Index Cond: (doc_num =
'014650340'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.031..0.031 rows=1 loops=1) Index Cond: (doc_num =
'014650361'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.031..0.031 rows=1 loops=1) Index Cond: (doc_num =
'014650362'::bpchar) -> Bitmap Index Scan on documents_pkey (cost=0.00..2.00
rows=1 width=0) (actual time=0.035..0.035 rows=1 loops=1) Index Cond: (doc_num =
'105419865'::bpchar) -> Hash (cost=1.16..1.16 rows=16 width=83) (actual time=0.080..0.080
rows=16 loops=1) -> Seq Scan on comments (cost=0.00..1.16 rows=16 width=83)
(actual time=0.005..0.037 rows=16 loops=1) Total runtime: 0.775 ms
(28 rows)
dcc=#
dcc=# EXPLAIN ANALYZE select * from documents left outer join comments on
(documents.doc_num = comments.doc_num) where documents.doc_num in (select
doc_num from documents limit 10);
QUERY PLAN
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Merge IN Join (cost=100000002.19..136154797.93 rows=10 width=654)
(actual time
=23.534..2216180.550 rows=10 loops=1) Merge Cond: ("outer".doc_num = "inner".doc_num) -> Merge Left Join
(cost=0.00..36129585.92rows=10083868 width=654)
(actual time=23.239..2188733.430 rows=6696218 loops=1) Merge Cond: ("outer".doc_num = "inner".doc_num)
-> Index Scan using documents_pkey on documents
(cost=0.00..35723277.
60 rows=10083868 width=569) (actual time=6.845..2107300.767 rows=6695853
loops=1
) -> Index Scan using doc_num_idx on comments
(cost=0.00..377203.50 row
s=311612 width=85) (actual time=16.368..6984.365 rows=243797 loops=1) -> Sort (cost=100000002.19..100000002.22
rows=10width=13) (actual
time=0.2
52..0.293 rows=10 loops=1) Sort Key: "IN_subquery".doc_num -> Limit (cost=100000000.00..100000001.92
rows=10width=13)
(actual t
ime=0.019..0.128 rows=10 loops=1) -> Seq Scan on documents (cost=100000000.00..101940460.68
rows=
10083868 width=13) (actual time=0.010..0.055 rows=10 loops=1) Total runtime: 2216180.973 ms
(11 rows)
dcc=#