Re: Subqueries and the optimizer
От | Stephan Szabo |
---|---|
Тема | Re: Subqueries and the optimizer |
Дата | |
Msg-id | 20030520111742.P70702-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | Subqueries and the optimizer ("Dmitri Bichko" <dbichko@genpathpharma.com>) |
Список | pgsql-general |
On Tue, 20 May 2003, Dmitri Bichko wrote: > So, I have a table with an index: > > dev=# explain SELECT blast_id FROM genes WHERE blast_batch_id = 2 AND > locus_id IN (1,2); > QUERY PLAN > ------------------------------------------------------------------------ > ------------------------------ > Index Scan using idx_genes_locus_id, idx_genes_locus_id on genes > (cost=0.00..88.21 rows=14 width=4) > Index Cond: ((locus_id = 1) OR (locus_id = 2)) > Filter: (blast_batch_id = 2) > > So far so good, but when I try it with a subquery: > > dev=# explain SELECT blast_id FROM genes WHERE blast_batch_id = 2 AND > locus_id IN (SELECT locus_id FROM ll_out_mm); > QUERY PLAN > ------------------------------------------------------------------------ > Seq Scan on genes (cost=0.00..21414353.48 rows=11003 width=4) > Filter: ((blast_batch_id = 2) AND (subplan)) > SubPlan > -> Seq Scan on ll_out_mm (cost=0.00..1267.64 rows=59264 width=4) > > > How can I nudge the optimizer in the direction of using the index in the > second case as well? Or is it supposed to be doing this in this case. In current stable versions, IN is not optimized terribly well. 7.4 will do a much better job. Converting to a join or EXISTS may help in the short term.
В списке pgsql-general по дате отправления: