De: Dickson S. Guedes <listas@...>
Para: Comunidade PostgreSQL Brasileira <pgbr-geral@...>
Enviadas: Quinta-feira, 2 de Julho de 2009 11:33:56
Assunto: Re: [pgbr-geral] Melhorar Sql
Em Thu, 02 Jul 2009 10:04:18 -0300, paulo matadr <
saddoness@...>
escreveu:
> select count(movimentor0_.mrem_id) as col_0_0_ from
> micromedicao.movimento_roteiro_empresa movimentor0_ where
> (movimentor0_.ftgr_id=26 and
> (movimentor0_.mrem_ammovimento=200906 and
> movimentor0_.mrem_tmprocessamento is null))
>
> Analyze:
>
Aggregate (cost=14774.62..14774.63 rows=1 width=4)
> -> Index Scan using xix3_movimento_roteiro_empresa on
> movimento_roteiro_empresa movimentor0_ (cost=0.00..14771.72 rows=1162
> width=4)
> Index Cond: (mrem_ammovimento = 200906)
> Filter: ((ftgr_id = 26) AND (mrem_tmprocessamento IS NULL))
Ola Paulo,
Você poderia nos informar quais colunas compõem o indice
xix3_movimento_roteiro_empresa?
Veja que é importante analisar um pouco os seus dados em relação ao seu
índice também,
pois muitas vezes a glanularidade deles pode fazer o PostgreSQL escolher
uma alternativa
que não é a melhor para você.
Percebo que a tabela envolvida é uma tabela de movimentos, tabelas com
esta caracteristicas
costumam ter TIMESTAMPs envolvido em suas buscas e
consequentemente
fazendo parte de índices.
No entanto a *ordem* com quem aparecem pode não ser satisfatórias, pois se
a *frequencia* de
dados *distintos* em uma determinada coluna é maior que outra, a primeira
é uma forte candidata
a estar na porção inicial do indice em relação a segunda.
Não conheço o seu caso, mas vejamos uma situacao de uma tabela com os dados
a b c
200906 26 56.98
200906 27 156.98
200906 28 256.98
200906 29 6.98
200906 30 6.60
200906 30 56.98
200906 30 256.98
200906 31 6.98
200907 31 256.98
200907 32 6.98
...
...
Neste caso acima, se voce possui consultas que buscam pelas colunas 'a' e
'b' é mais
interessante voce ter um indice (b,a) do que (a,b) pois a frequencia de
'b'
repetidos
é muito menor do que 'a' e isto diminuira o número de registros
percorridos no índice em
uma consulta com predicado "b=? AND a=?" por exemplo.
Este é apenas um exemplo, pois não sei como estão desenhados os seus
indices.
Meus R$ 0,02 ...
[]s
Dickson S. Guedes
http://pgcon.postgresql.org.brhttp://www.postgresql.org.br_______________________________________________
pgbr-geral mailing list
pgbr-geral@...https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral