Isso mesmo , usei seu raciocinio alterando a ordem no meu index
de acordo com o distinct dos campos, fico super rapido
fico assim:
CREATE INDEX xix4_movimento_roteiro_empresa
ON micromedicao.movimento_roteiro_empresa
USING btree
(mrem_tmprocessamento, ftgr_id, mrem_ammovimento)
TABLESPACE indices
WHERE mrem_tmprocessamento IS NULL;
bom ainda me sobro uma duvida nessa condicional:
WHERE mrem_tmprocessamento IS NULL
existe algum problema em colocar uma condicional de indice como is null?
________________________________
De: Dickson S. Guedes <lis...@guedesoft.net>
Para: Comunidade PostgreSQL Brasileira <pgbr-geral@listas.postgresql.org.br>
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 <saddon...@yahoo.com.br>
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.br
http://www.postgresql.org.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral