Página 1 de 1

Select demorando

Enviado: 04 Mai 2026 17:17
por Poka
Olá à todos,

alguém tem uma solução melhor? tá demorando.

pagarb é a tabela
ela já esta com o ìndice docum+codfor+tpnota+serie+ordem

Código: Selecionar todos

   str:="select b.valor , b.dc , b.nrecibo , d.valor ,";
   +"(select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem =  '"+xchave+"'  and b.dc  = 'C'    and trim(b.nrecibo)=''  )   ,";
   +"(select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem =  '"+xchave+"'  and b.dc  = 'D'    and trim(b.nrecibo)=''  )   ,";
   +"(select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem =  '"+xchave+"'  and b.dc  = 'C'    and trim(b.nrecibo)<>''  )   ,";
   +"(select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem =  '"+xchave+"'  and b.dc  = 'D'    and trim(b.nrecibo)<>''  )   ";
   +" from "+pagarb+" b INNER JOIN "+pagard +" d on d.docum||d.codfor||d.tpnota||d.serie||d.ordem =  '"+xchave+"'"  ;
			+" group by  b.valor,b.dc, b.nrecibo , d.valor;"
Poka

Re: Select demorando

Enviado: 04 Mai 2026 18:18
por alxsts
Olá!

Facilitaria bastante a análise e ajuda se você postasse o código SQL já concatenado, entre as tags code e /code...

Re: Select demorando

Enviado: 04 Mai 2026 23:35
por alxsts
Olá!
alxsts escreveu: 04 Mai 2026 18:18 Facilitaria bastante a análise e ajuda se você postasse o código SQL já concatenado, entre as tags code e /code..

Código: Selecionar todos

select b.valor , b.dc , b.nrecibo , d.valor ,
       (select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem = '"+xchave+"' and b.dc = 'C' and trim(b.nrecibo)='' ) ,
       (select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem = '"+xchave+"' and b.dc = 'D' and trim(b.nrecibo)='' ) ,
       (select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem = '"+xchave+"' and b.dc = 'C' and trim(b.nrecibo)<>'' ),
       (select sum(b.valor) from "+pagarb +" b where b.docum||b.codfor||b.tpnota||b.serie||b.ordem = '"+xchave+"' and b.dc = 'D' and trim(b.nrecibo)<>'' ) 
  from "+pagarb+" b 
  INNER JOIN "+pagard +" d
          on d.docum||d.codfor||d.tpnota||d.serie||d.ordem = '"+xchave+"'
  group by b.valor,b.dc, b.nrecibo , d.valor
Foi isto que eu quis sugerir. Não alterei nada. Pode deletar o outro tópico.

Talvez melhore com una ou mais subqueries. Estas colunas mencionadas nas cláusulas WHERE tem índices? Dependendo se tem ou não, cada SUM destes pode ter que ler milhares de linhas, degradando a performance.

Qual banco de dados e versão utilizada? Dependendo, pode-se usar algumas CTEs (Common Table Expressions).

Re: Select demorando

Enviado: 05 Mai 2026 18:30
por JoséQuintas
Parece que está multiplicando uma consulta pela quantidade de registros na tabela.
E se entrar em loop, vai ser consulta infinita.
E ainda relaciona isso com mais consulta.

Nem quero tentar entender isso.

Mais prático o usuário se entender com a IA, explicando o que quer.
Com certeza a pesquisa desperdiça tempo, talvez tempo demais.

Re: Select demorando

Enviado: 05 Mai 2026 18:37
por JoséQuintas
Não conheço o x || y || z

Re: Select demorando

Enviado: 05 Mai 2026 18:54
por alxsts
Olá!
JoséQuintas escreveu: 05 Mai 2026 18:37 Não conheço o x || y || z
Em alguns SGBD, como Oracle e PostgreSQL, este é o operador de concatenação de strings. O mesmo que
x + y + z