SQL 'in' vs join.
От
mlw
Тема
SQL 'in' vs join.
Дата
Msg-id
3A25888A.56AEF64D@mohawksoft.com
Список
Дерево обсуждения
Re: SQL 'in' vs join. Hannu Krosing <hannu@tm.ee>
Why is a "select * from table1 where field in (select field from table2
where condition )"
is so dramatically bad compared to:
"select * from table1, table2 where table1.field = table2.field and
condition"
I can't understand why the first query isn't optimized better than the
second one. The 'in' query forces a full table scan (it shouldn't) and
the second one uses the indexes. Does anyone know why?
I know I am no SQL guru, but my gut tells me that the 'in' operator
should be far more efficient than a join.
Here are the actual queries:
cdinfo=# explain select trackid from zsong where muzenbr in (select
muzenbr from ztitles where title = 'Mulan') ;
NOTICE: QUERY PLAN:
Seq Scan on zsong (cost=100000000.00..219321449380756.66 rows=2193213
width=4) SubPlan -> Materialize (cost=100000022.50..100000022.50 rows=10 width=4) -> Seq Scan on ztitles (cost=100000000.00..100000022.50
rows=10 width=4)
cdinfo=# explain select trackid from zsong, ztitles where
ztitles.muzenbr = zsong.muzenbr and title = 'Mulan' ;
NOTICE: QUERY PLAN:
Merge Join (cost=0.00..183664.10 rows=219321 width=12) -> Index Scan using zsong_muznbr on zsong (cost=0.00..156187.31
rows=2193213 width=8) -> Index Scan using ztitles_pkey on ztitles (cost=0.00..61.50
rows=10 width=4)
cdinfo=# \d zsong Table "zsong"Attribute | Type | Modifier
-----------+-------------------+-------------------------------------------muzenbr | integer |disc | integer |trk | integer |song | character varying |trackid | integer | not null default
nextval('trackid'::text)artistid | integer |acd | character varying |
Indices: zsong_muznbr, zsong_pkey
cdinfo=# \d ztitles Table "ztitles"Attribute | Type | Modifier
------------+-------------------+----------muzenbr | integer | not nullartistid | integer |cat2 | character varying |cat3 | character varying |cat4 | character varying |performer | character varying |performer2 | character varying |title | character varying |artist1 | character varying |engineer | character varying |producer | character varying |labelname | character varying |catalog | character varying |distribut | character varying |released | character varying |origrel | character varying |nbrdiscs | character varying |spar | character varying |minutes | character varying |seconds | character varying |monostereo | character varying |studiolive | character varying |available | character(1) |previews | character varying |pnotes | character varying |acd | character varying |
Index: ztitles_pkey
--
http://www.mohawksoft.com
В списке pgsql-hackers по дате отправления
От: Tom Lane
Дата:
От: Joel Burton
Дата: