MELHORANDO CONSULTA SQL - ACCESS
Bons links SAMUKA
comece a pensar em criar procedures, assim fica a cargo do banco o desenpenho, ficando o computador livre deste processamento, isto aumenta muito o desempenho.
só não me pergunte como criar esta procedure.
comece a pensar em criar procedures, assim fica a cargo do banco o desenpenho, ficando o computador livre deste processamento, isto aumenta muito o desempenho.
só não me pergunte como criar esta procedure.
As dicas dos colegas acho que já são suficientes.
PS. Com Jet Database (Access) não existe processamento no servidor. Se vc precisa de 10 registros entre 500.000, os 500.000 registros será carregados na estação onde ocorrerá a filtragem e com wireless [Ô]parece[Ô] que o desempenho piora exponencialmente.
Depois que estudei um pouco sobre protocolos de redes sem fio e a montanha de dificuldades que precisam ser superadas para coisa acontecer, e a experiência que tive, não sinto seguro em usar Access em redes sem fio.
PS. Com Jet Database (Access) não existe processamento no servidor. Se vc precisa de 10 registros entre 500.000, os 500.000 registros será carregados na estação onde ocorrerá a filtragem e com wireless [Ô]parece[Ô] que o desempenho piora exponencialmente.
Depois que estudei um pouco sobre protocolos de redes sem fio e a montanha de dificuldades que precisam ser superadas para coisa acontecer, e a experiência que tive, não sinto seguro em usar Access em redes sem fio.
Bom, Criar indices na tabela ajuda muito.
Criação de procedures, como já mencionado, irá aumentar muito o desempenho da consulta.
Quando à rede Wireless, sugiro que não utilize para comunicação com banco de dados, pois o desenpenho despenca, isto não acontece somente com o access, mas tambem com firebird(uma pequena queda no desempenho) e outros bancos de dados.
Abraços
Criação de procedures, como já mencionado, irá aumentar muito o desempenho da consulta.
Quando à rede Wireless, sugiro que não utilize para comunicação com banco de dados, pois o desenpenho despenca, isto não acontece somente com o access, mas tambem com firebird(uma pequena queda no desempenho) e outros bancos de dados.
Abraços
Se você tem uma rede sem fio, fuja imediatamente do Access e mude para um gerenciador de banco de dados como SQL Server, Oracle, MySQL, Firebird. Estes foram projetados para trabalhar com requisições simuntâneas, transações. O Access funciona com transação, sim, mas com um fator limitante, ele não foi projetado para um grande volume de dados, nem tão pouco grande quantidade de requisições, sendo que com o tempo ele poderá começar apresentar problemas de integridade e chegar ao ponto do banco conromper sozinho (como já tive problemas no passado em uma empresa que trabalhe).
Completando a informação que o LLAIA, o Access tem um problema sério que este envia uma [Ô]cópia[Ô] do banco pela rede, devido a esta caracterÃstica única, degradando a velocidade das aplicações quando estas crescem muito.
Resumindo: aposente o Access quanto é tempo e mude para um SGDB (Sistema Gerenciador de Banco de Dados) quanto é tempo, antes que este banco começe a te dar dor de cabeças por quer ele está perdendo dados ou o por que o banco inteiro ficou conrompido.
Completando a informação que o LLAIA, o Access tem um problema sério que este envia uma [Ô]cópia[Ô] do banco pela rede, devido a esta caracterÃstica única, degradando a velocidade das aplicações quando estas crescem muito.
Resumindo: aposente o Access quanto é tempo e mude para um SGDB (Sistema Gerenciador de Banco de Dados) quanto é tempo, antes que este banco começe a te dar dor de cabeças por quer ele está perdendo dados ou o por que o banco inteiro ficou conrompido.
MAICONJG, testa essa Consulta pra ver se melhora a performance.
PS. Não tenho certeza que está correta a prioridade, pois foi no [Ô]zóio[Ô] ....
PS. Não tenho certeza que está correta a prioridade, pois foi no [Ô]zóio[Ô] ....
SELECT TOP 20 Tele_Capa.data, Tele_capa.codigo_tele, Tele.codigo_produto, desc_longa, quantidade, valor_tele, apelido, motivo
FROM (((Tele LEFT Join tele_Capa ON Tele.codigo_tele = tele_Capa.codigo_tele)
LEFT JOIN Funcionarios ON Tele_Capa.codigo_Funcionario = Funcionarios.codigo_Funcionario)
LEFT JOIN Produtos ON Tele.codigo_produto = Produtos.codigo)
ORDER BY Tele.codigo_tele DESC
engraçado é o seguinte:
se eu faço a consulta do terminal, leva mais ou menos 15 segundos..
se eu faco essa mesma consulta (mas que retorne com outros dados) demora só uns 3 segundos... ou seja, na segunda consulta fica mais rapido, mesmo sendo outros resultados.
alguem sabe porque?
como posso fazer uma procedure no access?
se eu faço a consulta do terminal, leva mais ou menos 15 segundos..
se eu faco essa mesma consulta (mas que retorne com outros dados) demora só uns 3 segundos... ou seja, na segunda consulta fica mais rapido, mesmo sendo outros resultados.
alguem sabe porque?
como posso fazer uma procedure no access?
Faltou o WHERE
SELECT TOP 20 Tele_Capa.data, Tele_capa.codigo_tele, Tele.codigo_produto, desc_longa, quantidade, valor_tele, apelido, motivo
FROM (((Tele LEFT Join tele_Capa ON Tele.codigo_tele = tele_Capa.codigo_tele)
LEFT JOIN Funcionarios ON Tele_Capa.codigo_Funcionario = Funcionarios.codigo_Funcionario)
LEFT JOIN Produtos ON Tele.codigo_produto = Produtos.codigo)
WHERE Tele_capa.codigo_cliente = [CODIGO_DO_CLIENTE]
ORDER BY Tele.codigo_tele DESC
Sugiro alterar o relacionamento entre as tabelas, conforme abaixo:
SELECT top 20 Tele_Capa.data, Tele_capa.codigo_tele, Tele.codigo_produto, desc_longa, quantidade, valor_tele, apelido, motivo
FROM ((Tele
INNER JOIN Produtos ON Tele.codigo_produto = Produtos.codigo)
INNER JOIN tele_Capa ON Tele.codigo_tele = tele_Capa.codigo_tele)
LEFT JOIN Funcionarios ON Tele_Capa.codigo_Funcionario=Funcionarios.codigo_Funcionario
WHERE Tele_capa.codigo_cliente = [Ô] & txtCodCliente & [Ô] [Ô]
ORDER BY Tele.codigo_tele desc [Ô])
SELECT top 20 Tele_Capa.data, Tele_capa.codigo_tele, Tele.codigo_produto, desc_longa, quantidade, valor_tele, apelido, motivo
FROM ((Tele
INNER JOIN Produtos ON Tele.codigo_produto = Produtos.codigo)
INNER JOIN tele_Capa ON Tele.codigo_tele = tele_Capa.codigo_tele)
LEFT JOIN Funcionarios ON Tele_Capa.codigo_Funcionario=Funcionarios.codigo_Funcionario
WHERE Tele_capa.codigo_cliente = [Ô] & txtCodCliente & [Ô] [Ô]
ORDER BY Tele.codigo_tele desc [Ô])
Citação::
engraçado é o seguinte:
se eu faço a consulta do terminal, leva mais ou menos 15 segundos..
se eu faco essa mesma consulta (mas que retorne com outros dados) demora só uns 3 segundos... ou seja, na segunda consulta fica mais rapido, mesmo sendo outros resultados.
alguem sabe porque?
como posso fazer uma procedure no access?
Não tenho certeza, mas possivelmente existe um sistema com cache nas bibliotecas de acesso. Seria uma boa descobrir como é gerenciado o cache caso ele exista.
Tópico encerrado , respostas não são mais permitidas