VELOCIDADE ADO

EPISCOPAL 14/12/2015 09:24:09
#455106
Olá pessoal

Gostaria de saber se alguem aqui tem a experiencia se é melhor trabalhar com recordset (Insert, Update, Delete) no ADO ..... ou é melhor usar COMMAND???
ALVAROVB2009 14/12/2015 09:43:30
#455109
Resposta escolhida
A princípio o seu banco tem que esta todo com os campos indexados ( chaves primárias e demais índices) para que a consulta possa ser feita mais rápida

Depois SEMPRE uso o recordset nos meus projetos, não rodo nada no banco, pois assim consigo controlar os campos que preciso sem ficar mandando o famoso select * from

Uma vez tive que dar a manutenção em um banco, onde a pesquisa estava demorando mais de 8 seg.
Quando fui ver não mudei nada no código, só que quem fez a estrutura do banco não fez os índices corretos e com isso demorava demais a consulta quando tinha que trazer uma quantidade razoável de dados
Após melhorar os índices, fiz a consulta de 8 seg cair para 0,6 e ai que fui mexer no código, tirando o select * from e colocando os campos que realmente precisa ser puxado e ai a pesquisa ficou praticamente instantânea 0,03
EPISCOPAL 14/12/2015 21:35:32
#455155
Citação:

a pesquisa ficou praticamente instantânea 0,03



O que vc fez (quais alterações no codigo) pra acelerar o trem???? essa é a questão!
ALVAROVB2009 14/12/2015 22:06:08
#455156
é o que eu coloquei

Ajustei o bando de dados, coloquei índices onde não tinha e tirei uma pancada de índice duplicado, essa foi a maior mudança, que consegui reduzir para os 0,6 seg

E depois no código eu tirei os select * from e coloquei somente os campos que eu precisava puxar, por exemplo

Select * from clientes

passei para

Select nome,endereço,bairro,cidade,cep,estado,telefone from cliente

Fazendo isso em todos os chamados do banco, a pesquisa passou de 0,6 para 0,03

Geralmente o grande problema esta no banco de dados mal estruturado, depois consultas que se faz no banco, depois código que carregam dados desnecessários(select*from)

Procure sempre rodar as query de consulta na máquina local, nada no banco
Procure deixar todos os campos das tabelas com índices
Ex
Tabela Item
CodItem (Índice e chave primaria)
codFornecedor (chave e índice )
descricao
estoque
valor

Tabela Fornecedor
CodFornecedor (Índice e chave primaria)
Razaosocial
endereco

Dessa forma por exemplo não importa o que vc queira buscar, sempre irá carregar rápido os item de um fornecedor

Procure sempre olhar isso no banco, criar campos de relacionamento entre as tabelas e deixar eles como chave e índices, isso ajuda pacas o banco se organizar em uma consulta, não importa que banco seja

Se tiver alguma dúvida pode perguntar
BRUNELLI 15/12/2015 09:04:13
#455167
USE SQL DIRETO TANTO PARA INSERT, SELECT, UPDATE OU DELETE

Dim rs As ADODB.Recordset
Set rs = DBADO.Execute([Ô]SELECT * FROM tabela WHERE ID=[Ô] & txtid)
If Not rsCT.EOF Then

MUITO MAIS RAPIDO
ATE +
EPISCOPAL 15/12/2015 10:29:25
#455171
Citação:

USE SQL DIRETO TANTO PARA INSERT, SELECT, UPDATE OU DELETE



Essa é o X da questão ..... qual o melhor método que agiliza .... não falo só da pesquisa, falo de inserir, deletar ou alterar!!!
OMAR2011 15/12/2015 11:24:38
#455172
Melhor forma para Update,Insert e Select.
Sql = Insert into
Sql = Update
Banco.Execute(Sql)
Select foi mencionado acima.
Muito importante BeginTrans, CommitTrans e RollBackTrans.
Garantia.
EPISCOPAL 15/12/2015 11:31:32
#455174
Omar é possivel um exemplo prático de cada um deles? esses [Ô]trans[Ô] desconheço ... toda vida eu usada básico do DAO ... depois migrei pra ADO pra acessar access 2007 ou posterior ...
SINCLAIR 15/12/2015 11:42:24
#455175
Colega Episcopal,

Os comandos SQL ficarão rápidos, tanto para insert, update, delete (isto se chama linguagem DML de Data Manipulation Language), na forma como o colega BRUNELLINFO escreveu e eu cito abaixo...

Citação:


Dim rs As ADODB.Recordset
Set rs = DBADO.Execute([Ô]SELECT * FROM tabela WHERE ID=[Ô] & txtid)



Claro, banco de dados bem indexado vai ajudar em muito os comandos ficarem ainda mais rápidos. Se você criar índices demais e criar índices para campos desnecessários, o sistema poderá ficar lento ao invés de rápido, porque cada comando insert/update/delete (DML) que for executado precisará atualizar os índices. Indexar é ótimo, mas tem que ser bem pensado.

O que o nosso colega OMAR2011 quis dizer é usar begin/commit (talvez até rollback) para garantir que os dados sejam atualizados no BD apenas se tudo der OK.

Exemplo:

update tab_clientes set nome = [ô]FULANO[ô] where cod_cli = 70


O comando acima vai sedr executado e o que for mudado no banco de dados é irreversível.

Agora assim...

Begin;
update tab_clientes set nome = [ô]FULANO[ô] where cod_cli = 70;
update tab_produtos set descricao = [ô]PRODUTO PARA VENDA[ô] where cod_produto = 56;
Commit;


No caso acima, os dois comandos update só serão executados se nenhum deles apresentar erro. O RollBack seria para fazer voltar atrás o que já tenha sido realizado em caso de erro. O funcionamento do Begin/Commit/RollBack pode mudar um pouquinho entre cada banco de dados (PostGreSQL, MySQL, SQL Server, Oracle, DB2, etc).

Como complemento, vale lembrar que o MySQL, ao contrário do que muitos pensam, não é gratuito, é pago (valor pequeno, mas é pago). Quando você contrata os serviços de hospedagem e parece nada pagar por ele, na verdade é que o preço do MySQL que o provedor de hospedagem está pagando não é repassado, mas ele (provedor) paga (ou deveria). A única versão gratuita do MySQL chama-se MySQL Community e pode ser usada apenas para fins próprios ou acadêmicos. A Oracle comprou os fontes do MySQL e ela mesma vende o BD Oracle, seria um [Ô]tiro no pé[Ô] dar o MySQL se querem vender o Oracle. No lugar do MySQL veio o MariaDB (também é bom).

Se puder sugerir algo, te aconselharia a deixar o Access e migrar para um banco mais profissional, com disponibilidade de ACID, por exemplo (todos os mencionados acima suportam ACID). Mas tuas migrações podem ser lentas, com calma, não precisa pressa.

Tudo de bom.
EPISCOPAL 15/12/2015 12:33:56
#455177
minha migração não é só de banco .... é de IDE
ALVAROVB2009 15/12/2015 13:12:43
#455181
Citação:

:
USE SQL DIRETO TANTO PARA INSERT, SELECT, UPDATE OU DELETE

Dim rs As ADODB.Recordset
Set rs = DBADO.Execute([Ô]SELECT * FROM tabela WHERE ID=[Ô] & txtid)
If Not rsCT.EOF Then

MUITO MAIS RAPIDO
ATE +


Isso foi o que eu tirei dos códigos, um banco mal indexado como coloquei, faz a pesquisa demorar e muito

Más após o ajuste no banco de dados a pesquisa começou a ser feita rápida, mesmo com esse select * from. Provavelmente o banco do BRUNELLINFO esteja bem indexado, por isso que a pesquisa seja rápida

Como o colega Zeuzebio colocou, a indexação do banco tem que ser muito bem pensada
E também aconselho a troca de banco, más tem que ir muito na calma, porque principalmente os campos datas serão muito afetados, por exemplo para gravar uma data no mysql, vc tem que gravar no formato YYYY-MM-DD

Achei uma video que ensina alguns comandos DML e DDL
Comandos DDL
Estava vendo e vale a pena ganhar um tempo assistindo a aula
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas