Re: SQL 'in' vs join.
От | Hannu Krosing |
---|---|
Тема | Re: SQL 'in' vs join. |
Дата | |
Msg-id | 3A2677C7.5B0974B2@tm.ee обсуждение исходный текст |
Ответ на | SQL 'in' vs join. (mlw <markw@mohawksoft.com>) |
Список | pgsql-hackers |
mlw wrote: > > Hannu Krosing wrote: > > > > mlw wrote: > > > > > > 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? > > > > Its not done yet, and probably hsomewhat difficult to do in a general > > fashion > > > > > 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') ; > > > > try > > > > explain > > select trackid > > from zsong > > where muzenbr in ( > > select muzenbr > > from ztitles > > where title = 'Mulan' > > and ztitles.muzenbr=zsong.muzenbr > > ); > > > > this should hint the current optimizer to do the right thing; > > > > ----------------- > > Hannu did you have indexes on both ztitles.muzenbr and zsong.muzenbr ? -------------- Hannu
В списке pgsql-hackers по дате отправления: