Complementando mais a informação, devido a pesquisas e testes realizados:
Desabilitando o SeqScan (SET ENABLE_SEQSCAN TO OFF), ai a consulta passa a
usar o indice correto.
Habilitando novamente o seqscan fiz alguns testes e cheguei a 2 querys com
resultados distintos de acordo com o limit usado, segue as mesmas e o
explain de cada:
1) a com pau
explain analyse Select a.CodPagador,b.Descricao
>From Frete01 a Left Outer Join Frete02 b On (a.CodPagador = b.CodCliente)
limit 9364
"Limit (cost=46619.72..46856.82 rows=9364 width=39) (actual
time=3385.710..3506.379 rows=9364 loops=1)"
" -> Merge Left Join (cost=46619.72..48113.50 rows=58995 width=39)
(actual time=3385.706..3479.509 rows=9364 loops=1)"
" Merge Cond: ("outer".codpagador = "inner".codcliente)"
" -> Sort (cost=24649.80..24797.29 rows=58995 width=11) (actual
time=1287.219..1305.888 rows=9364 loops=1)"
" Sort Key: a.codpagador"
" -> Seq Scan on frete01 a (cost=0.00..19974.95 rows=58995
width=11) (actual time=11.057..484.380 rows=59161 loops=1)"
" -> Sort (cost=21969.91..22274.37 rows=121784 width=39) (actual
time=2098.457..2119.401 rows=11976 loops=1)"
" Sort Key: b.codcliente"
" -> Seq Scan on frete02 b (cost=0.00..8127.84 rows=121784
width=39) (actual time=3.306..384.981 rows=121740 loops=1)"
"Total runtime: 3525.731 ms"
2) a que funciona
explain analyse Select a.CodPagador,b.Descricao
>From Frete01 a Left Outer Join Frete02 b On (a.CodPagador = b.CodCliente)
limit 9363
"Limit (cost=0.00..46856.62 rows=9363 width=39) (actual
time=11.205..536.761 rows=9363 loops=1)"
" -> Nested Loop Left Join (cost=0.00..295237.26 rows=58995 width=39)
(actual time=11.201..508.936 rows=9363 loops=1)"
" -> Seq Scan on frete01 a (cost=0.00..19974.95 rows=58995
width=11) (actual time=11.057..220.711 rows=9363 loops=1)"
" -> Index Scan using frete02_f021 on frete02 b (cost=0.00..4.65
rows=1 width=39) (actual time=0.021..0.024 rows=1 loops=9363)"
" Index Cond: ("outer".codpagador = b.codcliente)"
"Total runtime: 551.331 ms"
logo se eu limitar a query a 9363 registros ele usa o indice se limitar a
9364 usa seq scan e demora pra burro, outro teste se na query com limit em
9363 eu der um order by codcliente ele passa a dar seqscan no join.
O que pode ser ?
lembrando que já rodei as rotinas de manutenção. (Vacuum Full, Analyze,
ReindexDb)
Marco Aurélio V. da Silva
Prodata Inf. e Cad. Ltda.
MSN: [EMAIL PROTECTED]
Fone: (33) 3322-3082
----- Original Message -----
From: "Marco Aurélio V. da Silva" <[EMAIL PROTECTED]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Tuesday, December 18, 2007 8:32 AM
Subject: [Bulk] Re: [pgbr-geral] [Bulk] Re: Duvida uso de indice em query
Só complementando, já rodei as rotinas de manutenção do bd, Vacuum, Analyze,
Reindex, e nada.
Fico no aguardo de qualquer sugestão.
Marco Aurélio V. da Silva
Prodata Inf. e Cad. Ltda.
MSN: [EMAIL PROTECTED]
Fone: (33) 3322-3082
----- Original Message -----
From: "Euler Taveira de Oliveira" <[EMAIL PROTECTED]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Monday, December 17, 2007 3:36 PM
Subject: [Bulk] Re: [pgbr-geral] Duvida uso de indice em query
Marco Aurélio V. da Silva wrote:
> Estou com o seguinte problema, ao executar uma determinada query em 2 db
> com
> estruturas iguais mais com dados diferentes eu obtenho resultados
> totalmente
> diferentes com relação ao tempo de execução. Em um vai igual um tiro, em
> outro demora muito, o volume de dados é mais ou menos o mesmo. Rodei um
> explain pra ver o motivo, e vi que em um database usa o indice na hora de
> fazer o relaciomanto entre tabelas, no outro naum. Verifiquei nos 2 db´s e
> vi que o indice existe nos 2, mas em apenas um db é um usado. O que fazer
> ?
>
EXPLAIN ANALYZE, por favor. Desconfio que (i) você não executa ANALYZE
frequentemente, ou seja, estatísticas desatualizadas (ii) o volume dos
dados nos dois sistemas estão fazendo com que algoritmos diferentes
sejam escolhidos.
--
Euler Taveira de Oliveira
http://www.timbira.com/
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral