« Return to Thread: Melhorar Sql

Res: Melhorar Sql

by paulo matadr :: Rate this Message:

Reply to Author | View in Thread

Some parts of this message have been removed. Learn more about Nabble's security policy.
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 <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.br
http://www.postgresql.org.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

 « Return to Thread: Melhorar Sql