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
