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 по дате отправления:

Предыдущее
От: Rod Taylor
Дата:
Сообщение: Re: sequence caches
Следующее
От: "Dean Gibson (DB Administrator)"
Дата:
Сообщение: Re: Subqueries and the optimizer