Array
(
)

Melhor forma de pesquisar com C# e MySql

Pjava
   - 06 ago 2012

Pessoal, preciso fazer o seguinte. Ler uma planilha excel e comparar com o conteudo de uma tabela no BD. Acontece, que no BD eu tenho 1763 registros e na planilha 65.000 linhas. OU seja, eu pego uma linha, e vou dando(1763) selects até eu achar a coincidência e isso por 65.000 vezes. Deram pra ver que é praticamente inviável realizar essa tarefa, pelo menos, extremamente lenta, pois praticamente para cada busca, uma chamada ao banco e etc... o que já demanda tempo. A minha pergunta é: Creio que alguém aqui já passou por isso ou parecido e s quer compartilhar conosco no forum sua experiência. E ainda tem mais um agravante que entrou hoje. Na planilha temos uma sequencia numérica, mas nas tabelas para alguns clientes, possuimos máscaras com pontos e hifens. Isso só piora as coisas. Gostaria de idéias ou caminhos em como fazer isso de forma mais eficaz e rápida. Obrigado a todos.

Joel Rodrigues
   - 06 ago 2012

EXPERIMENTE carregar os dados do banco para uma lista local e fazer a consulta com LINQ To Objects para ver a diferença no desempenho.

Valter Furtado
   - 06 ago 2012

Na teoria, o local ideal para tal pesquisa é no banco... uma vez que nele o retorno é muuito mais rapido por ser um processo interno.

Você trazer 65000 registro e fazer as consultas vai ser extramamente lento.

Tente usar Stored Procedures e funcões do banco para otimizar a consulta, mas trazer os resultados e pesquisar com Linq vai ser muito lento.

Rodrigo Odasaki
   - 06 ago 2012

Só uma observação.

No banco existem 1763 registros e não 65 mil.
Eu retornaria um List de objetos! e na aplicação faria a comparação.

A minha dúvida é, isto vai ser feito apenas 1 vez? Caso seja o usuário que deva realizar este procedimento, não existem filtros nestas tabelas?

Pjava
   - 06 ago 2012

Isso já é com filtro de data e por cliente. O banco todo tem 88.000 registro. Eu só não fiz com BD direto, pq não sei trazer para o MySql dados direto de uma Planilha. Por isso apelei para o C#, mas tá muito lento.