Melhorar Sql

View: New views
4 Messages — Rating Filter:   Alert me  

Melhorar Sql

by paulo matadr :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Some parts of this message have been removed. Learn more about Nabble's security policy.
Meu povo,
To com problemas nessa query, ja fiz um monte de testes e esse foi o resultado mais otimizado que conseguir gerar,
alguem  tem mais alguma ideia pra me dar, ouvir falar no uso do exist mais nao to muito  familiarizado,
algo mas que eu n tenha percebido ou de modificaçao da mesma


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))




Agradeço desde ja



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

Re: Melhorar Sql

by Osvaldo Kussama :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/7/2 paulo matadr <saddoness@...>:

> Meu povo,
> To com problemas nessa query, ja fiz um monte de testes e esse foi o
> resultado mais otimizado que conseguir gerar,
> alguem  tem mais alguma ideia pra me dar, ouvir falar no uso do exist mais
> nao to muito  familiarizado,
> algo mas que eu n tenha percebido ou de modificaçao da mesma
>
>
> 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))
>


Se o que você precisa é a quantidade de movimentor0_.mrem_id atendendo
aos critérios então EXISTS não atenderá.

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Melhorar Sql

by Dickson S. Guedes-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

Res: Melhorar Sql

by paulo matadr :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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