Ir para conteúdo
Fórum Script Brasil
  • 0

Otimizando uma procedure


jlcSampaio

Pergunta

Boa tarde, olha eu novamente com mais uma dúvida referente a minha procedure, vamos lá...

CREATE PROCEDURE mudaKey(in cod int)
BEGIN
     DECLARE c int DEFAULT cod;
     DECLARE a,b INT;
     declare zeros int default 0;
     declare codBarra char(14);
     declare i int default 0;
     
     DECLARE mudaKey CURSOR FOR select key_produtos FROM produtos;
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET b=1;
     
     
     OPEN mudaKey;
     REPEAT
     FETCH mudaKey INTO a;
     
     set zeros = 14 - CHARACTER_LENGTH(a);
     
     set codBarra = a;
     set i = 0;
     
     WHILE(i < zeros) do
         
         SET codBarra = concat('0', codBarra);
         set i = i + 1;
     end while;
     
     UPDATE produtos as p set p.key_produtos = c, p.CODIGO_PRODUTO_INT = c, p.CODIGO_BARRA_STR = codBarra where p.key_produtos = a;
     
     UPDATE compras_itens AS ci SET ci.KEY_PRODUTOS = c, ci.CODIGO_PRODUTO_INT = c, ci.CODIGO_BARRA_STR = codBarra
     WHERE ci.KEY_PRODUTOS = a;
         
     UPDATE vendas_itens AS vi SET vi.KEY_PRODUTOS = c, vi.CODIGO_PRODUTO_INT = c, vi.CODIGO_BARRA_STR = codBarra
     WHERE vi.KEY_PRODUTOS = a;
         
     UPDATE vendasnf_itens AS vnfi SET vnfi.KEY_PRODUTOS = c, vnfi.CODIGOBARRA = codBarra
     WHERE vnfi.KEY_PRODUTOS = a;
         
     set c = c + 1;
     
     UNTIL b=1 END REPEAT;
     CLOSE mudaKey;
     
     SELECT "ok";
END;

Esta aí é minha procedure, tenho na tabela "vendas_itens" um total de um pouco menos de 1.000.000 de registros, torno de 200 mb somente nesta tabela.

Daí quando executo esta procedure ela demora (obs.: só para este banco, pois tenho clientes com bancos bem maiores) mais ou menos 27 minutos para atualizar as tabelas referidas à procedure.

Bom, se alguém puder me ajudar a otimizar este processo, vou agradecer muito, desde já agradeço e até!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

'jlcSampaio' Verifique e altere algumas das situações abaixo:

Ative a cláusula ZEROFIL em key_produtos na tabela produtos. Você não precisará preencher CODBARRA com zeros. Ele já virá cheio do campo.

Verifique se existem indices para o campo key_produtos nas tabelas produtos, compras_itens, vendas_itens e vendasnf_itens.

Link para o comentário
Compartilhar em outros sites

  • 0
'jlcSampaio' Verifique e altere algumas das situações abaixo:

Ative a cláusula ZEROFIL em key_produtos na tabela produtos. Você não precisará preencher CODBARRA com zeros. Ele já virá cheio do campo.

Verifique se existem indices para o campo key_produtos nas tabelas produtos, compras_itens, vendas_itens e vendasnf_itens.

obrigado Denis Courcy pela ajuda, vou sim verificar esta cláusula ZEROFIL e quanto a chave produtos, ela está contida nas outras tabelas. Até e novamente obrigado!

Editado por jlcSampaio
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...