Aproveitando que o colega Avelino lembrou do DLookup com campos concatenados, resolvi criar um aplicativo para testarmos a performance de vários métodos de manipulação de registros. No exemplo temos algumas formas de inserção, atualização e exclusão de registros.
Temos tambem exemplos com diversos métodos de consulta. Para isso, incluí uma tabela com os CEPs do Brasil e, para melhorar os testes, incluí mais 10 campos extras nessa tabela, afim de facilitar a compreensão de pesquisas com muitos dados.
Observem que ao digitar um cep existente na tabela e dar Enter, os botões serão habilitados. Um deles faz a pesquisa utilizando DLookup campo a campo. O outro faz a pesquisa utilizando DLookup concatenado. O terceiro e quarto fazem a pesquisa utilizando Recordset com FindFirst e com filtro via SELECT.
Observem que o DLookup linha a linha leva muito mais tempo para retornar o resultado. As outras três formas trazem o resultado quase que instantaneamente, embora o Recordset com FindFirst parece ser um pouco mais lento que os outros dois. Ou seja, pela ordem do mais rápido para o mais lento, me parece que fica assim:
1 - DLookup concatenado e Recordset filtrado com SELECT * FROM;
2 - Recordset com FindFirst
3 - DLookup campo a campo - bem mais lento que os demais.
Há um botão no formulário para limpar os resultados para continuar o teste com os outros métodos.
No formulário de inserção, atualização e exclusão de registros, foram utilizados os métodos por Recordset e por SQL usando CurrentDb.Execute. Aqui há diferenças bem significativas entre os dois métodos e tambem há diferenças entre as ações. Por exemplo, para inserir registros e para atualizar, o Recordset se mostrou mais rápido, enquanto que, para excluir, o SQL com Execute supera de longe o método por Recordset, sendo que o primeiro é quase que instantâneo e o segundo leva vários segundos.
Para esse formulário de inserção, atualização e exclusão de registros, tem uma outra tabela. Aconselho a fazer os teste com uma boa quantidade de registros. Digamos uns 10 milhões para os testes de exclusão e atualização. Para os teste de inserção, pode ser bem menos para facilitar as coisas. Há um campo para colocar a quantidade de registros a inserir.
Tem tambem um formulário com uma listbox, utilizando o método de inserção por Loop em um Recordset no modo de lista de valores e utilizando SELECT no modo de "Table/Query". Aqui, o segundo método é extremamente mais eficiente. Enquanto o tempo gasto é quase nulo nesse, no primeiro leva-se vários minutos para preencher a listbox, alem da quantidade de linhas inseridas ser muito maior utilizando "Table/Query" e SELECT. Enquanto esse retorna 65.534 linhas, o outro traz pouco mais de 600.
Baixe o exemplo e faça os testes.
Comente, opine, fale das suas experiências no assunto.
Temos tambem exemplos com diversos métodos de consulta. Para isso, incluí uma tabela com os CEPs do Brasil e, para melhorar os testes, incluí mais 10 campos extras nessa tabela, afim de facilitar a compreensão de pesquisas com muitos dados.
Observem que ao digitar um cep existente na tabela e dar Enter, os botões serão habilitados. Um deles faz a pesquisa utilizando DLookup campo a campo. O outro faz a pesquisa utilizando DLookup concatenado. O terceiro e quarto fazem a pesquisa utilizando Recordset com FindFirst e com filtro via SELECT.
Observem que o DLookup linha a linha leva muito mais tempo para retornar o resultado. As outras três formas trazem o resultado quase que instantaneamente, embora o Recordset com FindFirst parece ser um pouco mais lento que os outros dois. Ou seja, pela ordem do mais rápido para o mais lento, me parece que fica assim:
1 - DLookup concatenado e Recordset filtrado com SELECT * FROM;
2 - Recordset com FindFirst
3 - DLookup campo a campo - bem mais lento que os demais.
Há um botão no formulário para limpar os resultados para continuar o teste com os outros métodos.
No formulário de inserção, atualização e exclusão de registros, foram utilizados os métodos por Recordset e por SQL usando CurrentDb.Execute. Aqui há diferenças bem significativas entre os dois métodos e tambem há diferenças entre as ações. Por exemplo, para inserir registros e para atualizar, o Recordset se mostrou mais rápido, enquanto que, para excluir, o SQL com Execute supera de longe o método por Recordset, sendo que o primeiro é quase que instantâneo e o segundo leva vários segundos.
Para esse formulário de inserção, atualização e exclusão de registros, tem uma outra tabela. Aconselho a fazer os teste com uma boa quantidade de registros. Digamos uns 10 milhões para os testes de exclusão e atualização. Para os teste de inserção, pode ser bem menos para facilitar as coisas. Há um campo para colocar a quantidade de registros a inserir.
Tem tambem um formulário com uma listbox, utilizando o método de inserção por Loop em um Recordset no modo de lista de valores e utilizando SELECT no modo de "Table/Query". Aqui, o segundo método é extremamente mais eficiente. Enquanto o tempo gasto é quase nulo nesse, no primeiro leva-se vários minutos para preencher a listbox, alem da quantidade de linhas inseridas ser muito maior utilizando "Table/Query" e SELECT. Enquanto esse retorna 65.534 linhas, o outro traz pouco mais de 600.
Baixe o exemplo e faça os testes.
Comente, opine, fale das suas experiências no assunto.