CONSULTA A BANCO DE DADOS MUITO LENTA
Boa tarde...
Estou usando um banco de dados em Access 2000, onde acesso o mesmo pelo visual basic 6, usando DAO. Este banco de dados possui mais de 1 milhão de registros, e a consulta retora apenas 1440 registros por vez, segundo os critérios da mesma.
Até aà tudo bem. O problema é que demora em torno de 49 segundos para realizar a consulta, pois o servidor é uma máquina antiga, e busca pela rede. Se a mesma consulta é realizada dentro do acess usando a mesma sql, é quase instantânea.
Abaixo está a instrução sql que chamo dentro de uma rotina no Visual basic:
Set ggReco = ggBase.OpenRecordset([Ô]SELECT Data, Hora, TemperaturaTrabalho, Temperatura1, Temperatura2, Umidade, TemperaturaExterna, Luminosidade, Hidrômetro FROM Temperatura WHERE Data = [Ô] & [Ô]#[Ô] & Format(txtData.Text, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] ORDER BY Hora[Ô])
Se alguém puder me ajudar com alguma dica, ou me dizendo o que posso fazer para melhorar.
Obrigado.
Estou usando um banco de dados em Access 2000, onde acesso o mesmo pelo visual basic 6, usando DAO. Este banco de dados possui mais de 1 milhão de registros, e a consulta retora apenas 1440 registros por vez, segundo os critérios da mesma.
Até aà tudo bem. O problema é que demora em torno de 49 segundos para realizar a consulta, pois o servidor é uma máquina antiga, e busca pela rede. Se a mesma consulta é realizada dentro do acess usando a mesma sql, é quase instantânea.
Abaixo está a instrução sql que chamo dentro de uma rotina no Visual basic:
Set ggReco = ggBase.OpenRecordset([Ô]SELECT Data, Hora, TemperaturaTrabalho, Temperatura1, Temperatura2, Umidade, TemperaturaExterna, Luminosidade, Hidrômetro FROM Temperatura WHERE Data = [Ô] & [Ô]#[Ô] & Format(txtData.Text, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] ORDER BY Hora[Ô])
Se alguém puder me ajudar com alguma dica, ou me dizendo o que posso fazer para melhorar.
Obrigado.
* Melhorar o servidor e melhorar a rede (equipamentos), pois não vejo problema na query.
* Veja se é possÃvel retirar alguns registros da tabela movendo-os para um backup, e depois vc mandar reparar os dados pra refazer a indexação.
* Veja se é possÃvel retirar alguns registros da tabela movendo-os para um backup, e depois vc mandar reparar os dados pra refazer a indexação.
Resolvido o problema, eu não tinha me ligado mas a tabela, estava sem nenhum Ãndice, e foi só criar um Ãndice com o campo Data, que a consulta passou a ser de menos de 1 segundo.a
Na verdade se todos os sistemas fossem bem projetados, não precisariamos de máquinas tão potentes, como usamos para realizar tarefas muitas vezes simples.
Obrigado pela ajuda.
Na verdade se todos os sistemas fossem bem projetados, não precisariamos de máquinas tão potentes, como usamos para realizar tarefas muitas vezes simples.
Obrigado pela ajuda.
Mas cara, indexar um campo Data não é recomendado se a granularidade for baixa pois vc só aumentaria o tamanho do BD e o Ãndice não seria tão eficiente.
LLAIA Escreveu:
Concordo com ele no entanto migre a sua conexão para ADO é mais eficiente e tem mais funcionalidades não é dificil
Citação:Mas cara, indexar um campo Data não é recomendado se a granularidade for baixa pois vc só aumentaria o tamanho do BD e o Ãndice não seria tão eficiente.
Concordo com ele no entanto migre a sua conexão para ADO é mais eficiente e tem mais funcionalidades não é dificil
Dim ggReco as ADODB.RecordSet
Dim Conn as ADODB.Connection
Public Sub Command1_Click()
set ggReco = New ADODB.RecordSet
set Conn = New ADODB.Connection
[ô]Abrindo a Conexão
Conn.Open [Ô]PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & App.Path & [Ô]SeuBanco.mdb;PERSIST SECURITY INFO=False;[Ô]
[ô]Dando o SELECT na Tabela
ggReco.Open [Ô]SELECT Data, Hora, TemperaturaTrabalho, Temperatura1, Temperatura2, Umidade, TemperaturaExterna, Luminosidade, Hidrômetro FROM Temperatura WHERE Data = [Ô] & [Ô]#[Ô] & Format(txtData.Text, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] ORDER BY Hora[Ô], Conn
[ô]Fechando a Conexão
Conn.Close
ggReco.Close
[ô]Limpando da Memória
Set ggReco = Nothing
Set Conn = Nothing
End Sub
Mudar para ADO e continuar com Access não vai melhorar.
Menosprezar o ACCESS é simplesmente arrogância de vocês aposto que todos vocês utilizaram access um dia e achava o melhor!
Não disse que o ACCESS é o melhor e sim ADO é melhor do que DAO.
No entanto enquanto ele achar que o ACCESS esta dentro do seu padrão de tolerância ao sistema que esta desenvolvendo não ha o porque questionar.
Ele solicitou ajuda sobre o ACCESS e VB e eu fiz minha parte.
Não disse que o ACCESS é o melhor e sim ADO é melhor do que DAO.
No entanto enquanto ele achar que o ACCESS esta dentro do seu padrão de tolerância ao sistema que esta desenvolvendo não ha o porque questionar.
Ele solicitou ajuda sobre o ACCESS e VB e eu fiz minha parte.
Tópico encerrado , respostas não são mais permitidas