ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Aumento de performance no select? **Concluído**

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jul 19, 2011 8:43 am    Assunto: Aumento de performance no select? **Concluído** Responder com Citação

Tenho um select assim

Código:
SELECT
  VIR.ID_PAGAMENTO_TITULAR,
  VI.NOME_TITULAR,
  VI.APELIDO_TITULAR,
  SUM(VIR.valor_rateio_titular) AS RATEIO_TITULAR
FROM
  VENDAS_ITENS_RATEIO VIR
INNER JOIN VENDAS_ITENS VI ON (VIR.CODIGO = VI.CODIGO
AND VIR.CODIGO_ITEM = VI.CODIGO_ITEM )

AND VIR.ID_PAGAMENTO_TITULAR =
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where processamento_rateio_itens.codigo = :codigoini
   and CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   )
AND VIR.VALOR_RATEIO_TITULAR > 0

GROUP BY 1,2,3


Ao executalo tenho uma perfirmance assim

Citação:
Citação:
------ Performance info ------
Prepare time = 63ms
Execute time = 203ms



Porém preciso executar com mais de um CODIGO e coloquei um IN no lugar do = e pronto, nem vai mais


Código:
SELECT
  VIR.ID_PAGAMENTO_TITULAR,
  VI.NOME_TITULAR,
  VI.APELIDO_TITULAR,
  SUM(VIR.valor_rateio_titular) AS RATEIO_TITULAR
FROM
  VENDAS_ITENS_RATEIO VIR
INNER JOIN VENDAS_ITENS VI ON (VIR.CODIGO = VI.CODIGO
AND VIR.CODIGO_ITEM = VI.CODIGO_ITEM )

AND VIR.ID_PAGAMENTO_TITULAR IN
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where processamento_rateio_itens.codigo IN :codigoini
   and CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   )
AND VIR.VALOR_RATEIO_TITULAR > 0

GROUP BY 1,2,3



Apenas passando os parametros
Citação:
codigo: 67
dataini 01/0/2008
datafin 15/07/2008



Não vai nem a pau com IN.

Usando firebird 1.5
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree


Editado pela última vez por adriano_servitec em Ter Jul 19, 2011 2:31 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Ter Jul 19, 2011 9:19 am    Assunto: Re: Aumento de performance no select? Responder com Citação

Bom dia,

está ocasionando algum problema?

a citação ficou errada a data inicial.

adriano_servitec escreveu:
Tenho um select assim

Código:
SELECT
  VIR.ID_PAGAMENTO_TITULAR,
  VI.NOME_TITULAR,
  VI.APELIDO_TITULAR,
  SUM(VIR.valor_rateio_titular) AS RATEIO_TITULAR
FROM
  VENDAS_ITENS_RATEIO VIR
INNER JOIN VENDAS_ITENS VI ON (VIR.CODIGO = VI.CODIGO
AND VIR.CODIGO_ITEM = VI.CODIGO_ITEM )

AND VIR.ID_PAGAMENTO_TITULAR =
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where processamento_rateio_itens.codigo = :codigoini
   and CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   )
AND VIR.VALOR_RATEIO_TITULAR > 0

GROUP BY 1,2,3


Ao executalo tenho uma perfirmance assim

Citação:
Citação:
------ Performance info ------
Prepare time = 63ms
Execute time = 203ms



Porém preciso executar com mais de um CODIGO e coloquei um IN no lugar do = e pronto, nem vai mais


Código:
SELECT
  VIR.ID_PAGAMENTO_TITULAR,
  VI.NOME_TITULAR,
  VI.APELIDO_TITULAR,
  SUM(VIR.valor_rateio_titular) AS RATEIO_TITULAR
FROM
  VENDAS_ITENS_RATEIO VIR
INNER JOIN VENDAS_ITENS VI ON (VIR.CODIGO = VI.CODIGO
AND VIR.CODIGO_ITEM = VI.CODIGO_ITEM )

AND VIR.ID_PAGAMENTO_TITULAR IN
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where processamento_rateio_itens.codigo IN :codigoini
   and CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   )
AND VIR.VALOR_RATEIO_TITULAR > 0

GROUP BY 1,2,3



Apenas passando os parametros
Citação:
codigo: 67
dataini 01/0/2008
datafin 15/07/2008



Não vai nem a pau com IN.

Usando firebird 1.5

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jul 19, 2011 9:28 am    Assunto: Responder com Citação

Olá, bom dia, então pra ser mais preciso esta select deve trazer dados de um view que ja usamos para outras ocasiões, e agora pediram para não incluir o codigo, apenas as datas Inicial e final

Ficou assim o modo que fiz
Código:
SELECT VIW.ID_PAGAMENTO_TITULAR,
  VIW.NOME_TITULAR,
  VIW.APELIDO_TITULAR,
  SUM(VIW.valor_rateio_titular) AS RATEIO_TITULAR
FROM VIEW_VENDAS_ITENS_RATEIO VIW

INNER JOIN processamento_rateio_itens PRI ON (VIW.ID_PAGAMENTO_TITULAR IN
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where  CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   ))

WHERE VIW.VALOR_RATEIO_TITULAR > 0
AND VIW.TIPO IS NULL
AND VIW.ITEM_CANCELADO = 'Não'

GROUP BY 1,2,3


Mais assim desta forma trava.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Ter Jul 19, 2011 9:58 am    Assunto: Responder com Citação

Bom dia,

tente da seguinte forma:

Código:

SELECT VIW.ID_PAGAMENTO_TITULAR,
       VIW.NOME_TITULAR,
       VIW.APELIDO_TITULAR,
       SUM(VIW.valor_rateio_titular) AS RATEIO_TITULAR
  FROM VIEW_VENDAS_ITENS_RATEIO VIW
 WHERE VIW.VALOR_RATEIO_TITULAR > 0
   AND VIW.TIPO IS NULL
   AND VIW.ITEM_CANCELADO = 'Não'

   AND VIW.ID_PAGAMENTO_TITULAR IN (SELECT distinct(PRI.CODIGO)
                                      FROM processamento_rateio_itens PRI
                                     where  CAST(PRI.data_processamento AS DATE) BETWEEN :inicio AND :final)

 GROUP BY 1,2,3


adriano_servitec escreveu:
Olá, bom dia, então pra ser mais preciso esta select deve trazer dados de um view que ja usamos para outras ocasiões, e agora pediram para não incluir o codigo, apenas as datas Inicial e final

Ficou assim o modo que fiz
Código:
SELECT VIW.ID_PAGAMENTO_TITULAR,
  VIW.NOME_TITULAR,
  VIW.APELIDO_TITULAR,
  SUM(VIW.valor_rateio_titular) AS RATEIO_TITULAR
FROM VIEW_VENDAS_ITENS_RATEIO VIW

INNER JOIN processamento_rateio_itens PRI ON (VIW.ID_PAGAMENTO_TITULAR IN
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where  CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   ))

WHERE VIW.VALOR_RATEIO_TITULAR > 0
AND VIW.TIPO IS NULL
AND VIW.ITEM_CANCELADO = 'Não'

GROUP BY 1,2,3


Mais assim desta forma trava.

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jul 19, 2011 10:04 am    Assunto: Responder com Citação

BrunoMoreyra escreveu:
Bom dia,

tente da seguinte forma:

Código:

SELECT VIW.ID_PAGAMENTO_TITULAR,
       VIW.NOME_TITULAR,
       VIW.APELIDO_TITULAR,
       SUM(VIW.valor_rateio_titular) AS RATEIO_TITULAR
  FROM VIEW_VENDAS_ITENS_RATEIO VIW
 WHERE VIW.VALOR_RATEIO_TITULAR > 0
   AND VIW.TIPO IS NULL
   AND VIW.ITEM_CANCELADO = 'Não'

   AND VIW.ID_PAGAMENTO_TITULAR IN (SELECT distinct(PRI.CODIGO)
                                      FROM processamento_rateio_itens PRI
                                     where  CAST(PRI.data_processamento AS DATE) BETWEEN :inicio AND :final)

 GROUP BY 1,2,3


adriano_servitec escreveu:
Olá, bom dia, então pra ser mais preciso esta select deve trazer dados de um view que ja usamos para outras ocasiões, e agora pediram para não incluir o codigo, apenas as datas Inicial e final

Ficou assim o modo que fiz
Código:
SELECT VIW.ID_PAGAMENTO_TITULAR,
  VIW.NOME_TITULAR,
  VIW.APELIDO_TITULAR,
  SUM(VIW.valor_rateio_titular) AS RATEIO_TITULAR
FROM VIEW_VENDAS_ITENS_RATEIO VIW

INNER JOIN processamento_rateio_itens PRI ON (VIW.ID_PAGAMENTO_TITULAR IN
(SELECT distinct(processamento_rateio_itens.CODIGO)
   FROM processamento_rateio_itens
   where  CAST(processamento_rateio_itens.data_processamento AS DATE) BETWEEN :inicio AND :final
   ))

WHERE VIW.VALOR_RATEIO_TITULAR > 0
AND VIW.TIPO IS NULL
AND VIW.ITEM_CANCELADO = 'Não'

GROUP BY 1,2,3


Mais assim desta forma trava.
Obrigado amigo, maisdeu na mesma coisa, vou mudar a view aqui, incluir esta tabela la também pra ver no que vai dar...

Depois volto a postar.

Valeu
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Jul 19, 2011 2:31 pm    Assunto: Responder com Citação

Era falta de criar indice nos campos envolvidos... Resolvido
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB