Em 26 de maio de 2017 18:36, Vinicius Segalin <[email protected]>
escreveu:

>
> Na consulta:
>
> explain select * from catalog_returns, call_center, customer
>> where c_customer_sk < (select max(c_customer_sk)/2 from customer)
>
>
> o meu planejador diz que a consulta retornará 28813111866 registros.
>
> Mas se eu fizer:
>
> explain select * from catalog_returns, call_center, customer
>
> where c_customer_sk < 50000
>
>
> o planejador diz que a consulta retornará 43386929586.
> Nota: a subquery
>
> select max(c_customer_sk)/2 from customer
>>
>
> retorna 50000.
>
> Você só soube depois que executou a consulta. EXPLAIN *não* executa a
consulta. Ele se baseia em estatísticas coletadas e um modelo de custo (que
nem sempre são exatos).


> Gostaria de saber se tem como eu fazer com que o PostgreSQL me retorne o
> valor correto na primeira consulta como retornou na segunda.
>

Por que você quer o valor correto? O Postgres não garante que suas
estimativas são precisas (nem daria porque ele poderia perder muito tempo
com planejamento ao invés de gastar o tempo em execução).

O Postgres está retornando um plano diferente ao substituir a subconsulta
por 50000? Apresente os planos com e sem a subconsulta e, também, da
subconsulta.


-- 
   Euler Taveira                                   Timbira -
http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
<http://www.timbira.com.br>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a