Select demorando

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 567
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Select demorando

Mensagem 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
Editado pela última vez por Itamar M. Lins Jr. em 04 Mai 2026 18:42, em um total de 1 vez.
Razão: Editar para adicionar a tag [code][/code]
alxsts
Colaborador
Colaborador
Mensagens: 3144
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil
Curtiram: 1 vez

Re: Select demorando

Mensagem 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...
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador
Colaborador
Mensagens: 3144
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil
Curtiram: 1 vez

Re: Select demorando

Mensagem 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).
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20482
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: Select demorando

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20482
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: Select demorando

Mensagem por JoséQuintas »

Não conheço o x || y || z
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3144
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil
Curtiram: 1 vez

Re: Select demorando

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Responder