CONSULTA A BANCO DE DADOS MUITO LENTA

CEDAHMER 11/08/2011 17:42:25
#381476
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.

LLAIA 11/08/2011 20:52:50
#381505
* 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.
CEDAHMER 12/08/2011 08:19:13
#381525
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.
LLAIA 12/08/2011 11:23:39
#381548
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.
FILMAN 12/08/2011 12:53:34
#381560
LLAIA Escreveu:
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
MARCOSLING 12/08/2011 13:32:48
#381567
Mudar para ADO e continuar com Access não vai melhorar.
FILMAN 13/08/2011 19:06:50
#381669
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.
Tópico encerrado , respostas não são mais permitidas