|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
Melhorar SqlMeu 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 Sql2009/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 SqlEm 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 SqlIsso 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 |
| Free embeddable forum powered by Nabble | Forum Help |