Amigos,
Eu tenho um sistema que precisa atualizar diariamente dados em uma tabela (50000 linhas ou mais) a partir de outra (45000 linhas) que é atualizada diariamente via importação de arquivo CSV.
Hoje funciona assim:
1. O usuario envia o arquivo csv para o servidor, através de upload no site;
2. O usuário manda importar o arquivo enviado para dentro de uma tabela mysql...
3. O usuário manda atualizar a segunda tabela... (está funcionando... mas é lento)
e este é o pepino...
nesta ultima atualização, o script percorre a tabela de clientes,
nesta tabela existem oito campos que são números de telefones...
cada número tem de ser checado na outra tabela, telefones bloqueados no procon, e marcar como bloqueados se estiverem...
desta forma, o script roda toda a tabela, faz oito consultas na tabela do procon, para cada linha da tabela de clientes, e atualiza o registro da tabela clientes se necessário...
tentei outra opção...
percorrer a tabela do procon, e fazer 8 updates na tabela de clientes, para cada linha da tabela do procon...
esta segunda opção ficou muito mais lenta que a primeira...
Estou procurando uma outra forma de fazer isso. Não sei se tem como fazer na própria consulta SQL...
Agradeço a ajuda de todos.
Laureano

Importar Csv E Atualizar Duas Tabelas
Started By Laureano Pereira, 23/11/2010, 07:52
4 replies to this topic
#1
Posted 23/11/2010, 07:52
#2
Posted 23/11/2010, 10:31
Veja se assim ajuda:
Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.
UPDATE clientes c INNER JOIN procon p ON p.telefone=c.telefone1 SET c.bloqueado1=p.bloqueado
Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.
#3
Posted 23/11/2010, 16:28
Veja se assim ajuda:
UPDATE clientes c INNER JOIN procon p ON p.telefone=c.telefone1 SET c.bloqueado1=p.bloqueado
Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.
Obrigado LeoB,
Eu imaginava que tinha como fazer esta consulta/atualização via SQL, mas não sabia como... Valeu a ajuda, economizou um bocado de linhas e tempo de processamento.
Testei localmente e funcionou a contento... agora vou implementar no site.
Obrigado novamente.
Laureano
Veja se assim ajuda:UPDATE clientes c INNER JOIN procon p ON p.telefone=c.telefone1 SET c.bloqueado1=p.bloqueado
Porque do jeito que você está fazendo, são 8 updates por registro. Assim, você faz 8 updates pra todo mundo. É só fazer um for pra ir mudando o número do campo.
Obrigado LeoB,
Eu imaginava que tinha como fazer esta consulta/atualização via SQL, mas não sabia como... Valeu a ajuda, economizou um bocado de linhas e tempo de processamento.
Testei localmente e funcionou a contento... agora vou implementar no site.
Obrigado novamente.
Laureano
LeoB,
Sou eu novamente, fiz a implementação no site, mas o tempo de execução é muito longo...
Enquanto isso o browser fica carregando, como posso ter uma resposta para o usuário enquanto processa a atualização no BD?
Obrigado
#4
Posted 23/11/2010, 18:43
Apesar de o tempo continuar longo, ele é menor do que costumava ser? Só pra saber.
Sobre a espera do usuário, você pode pesquisar por classes que exibam uma barra de progresso enquanto o código faz o que tem que fazer. Aí dentro do seu for você vai atualizando o andamento.
Sobre a espera do usuário, você pode pesquisar por classes que exibam uma barra de progresso enquanto o código faz o que tem que fazer. Aí dentro do seu for você vai atualizando o andamento.
#5
Posted 25/11/2010, 18:21
Apesar de o tempo continuar longo, ele é menor do que costumava ser? Só pra saber.
Sobre a espera do usuário, você pode pesquisar por classes que exibam uma barra de progresso enquanto o código faz o que tem que fazer. Aí dentro do seu for você vai atualizando o andamento.
Leo,
O tempo estava exagerado, mais de 15min... por enquanto optei por uma solução um pouco diferente, ao invés de marcar os telefones boqueados no cadastro de clientes após a importação do arquivo do procon estou bloqueando consultando se o telefone esta bloqueado na hora que o usuário seleciona um cliente... ficou mais simples... mas bem mais rápido... por enquanto muito obrigado.
Laureano
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)