Otimizando sua aplicação com acesso a banco de dados


Ao desenvolver uma aplicação com acesso a um banco de dados , além dos pontos básicos que você deve ter em mente ao criar seu código, formulários, módulos, etc.. gostaria de focar os fatores relacionados a base de dados que afetam a performance de sua aplicação , são eles:

Usando índices em sua base de Dados

Indexar sua tabela de dados acelera o acesso aos dados, pois você esta fornecendo ao JET ponteiros aos registros que ele usa para pesquisar os dados sem ter que ler a tabela inteira.

Voce pode criar basicamente dois tipos de índices:

  1. Índices únicos -geralmente usados com chaves primárias . Estes índices não permitem a repetição de itens do índice na tabela.
  2. Ïndices não únicos - Permitem a repetição de itens do índice na tabela, são usados com chaves estrangeiras ou com campos que são muito usados para operações de busca e ordenação na base de dados

Determinando os campos a indexar

Nem sempre é óbvio a escolha dos campos para criar os índices , mas podemos nos ater aos tópicos em que quase sempre isto é uma necessidade:

  1. Chave Primária - Por definição é um índice único na tabela e sua utilização acelera as operações de busca e ordenação da base de dados. Como exemplo podemos citar uma tabela clientes com os seguintes campos: codigo, nome, endereço , telefone . É obvio que você deve criar um índice único com o campo codigo , gerando uma chave primária , dessa forma não será permitido o cadastramento de códigos idênticos.
  2. Chave Estrangeira - Os campos usados como chave estrangeira devem ser indexados mesmo que nem sempre seja possível a chave única. Esta medida acelera a criação de consultas SQL entre as tabelas relacionadas.
  3. Consultas e Ordenações - Campos usados como critério para criar consultas, os que fazer parte das cláusulas WHERE e ORDER BY , e os que são usados para ordenações se indexados aceleram o desempenho.
É claro que o bom senso deve falar mais alto , pois se você usar índices demais isto pode ter consequências indesejáveis. Se a sua aplicação tiver uma intensa entrada/alteração/inclusão de dados, o uso de muitos índices aumenta o tempo de inclusão e atualização em sua base de dados , visto que todos os índices devem ser atualizados. Neste caso você deve se limitar aos índices que são realmente necessários.
 
O JET ENGINE

Você pode usar o mecanismo JET para gerenciar a integridade dos dados ao ínves de querer criar código para este penoso trabalho. O JET possui mecanismos sofisticados para gerenciar a integridade dos dados , dentre os quais citamos:

  1. Integridade a nível de entidade - Evita a duplicidade de registros nas tabelas da base de dados ; podemos conseguir isto com a utilização de chaves primárias e uma boa normalização das tabelas.
  2. Integridade de domínio - Faz com que os valores fornecidos para os campos estejam dentro de faixas aceitáveis e válidas de valores; fazemos isto usando chaves estrangeiras e regras definidas para os valores dos campos.
  3. Integridade Referencial - Evita que existam valores para chaves estrangeiras sem registros correspondentes. Conseguimos isto estabelecendo o relacionamento entre as tabelas e impondo a integridade referencial.
  4. Estabelecendo regras comerciais - Ao estabelecer regras para validação dos campos usando as propriedades do objeto Field (ValidationRule, ValidationText, Required , etc..) você esta evitando código e deixando por conta do JET um bom trabalho.
 
Limitando o Acesso aos Dados

De nada adiantará se você criar os seus índices corretamente , normalizar bem a sua base de dados e impor a integridade ao seus dados se na abertura de usa aplicação você carrega aquela combobox com nada mais nada menos que todos os 10.000 nomes de clientes de sua base de dados, ou tenta prencher um grid com uma consulta de múltiplas tabelas que retornam uma grande quantidade de registros e com muitas colunas quando você só precisa de algumas. Vejamos algumas dicas a respeito:

  1. Limite o número de linhas usadas - Geralmente o usuário vai precisar de uma ou de poucas linhas de dados para trabalhar , então por que tentar carregar todas as linhas de um grid ou de uma combobox ou ListBox vistoque isto pode ser muito lento.
  2. Não trabalhe com mais colunas do que você precisa - Se você customa usar SELECT * FROM ... pense duas vezes, será que você precisa de todos os campos em sua fonte de dados ? Sem falar que campos MEMO e do tipo BINARY usam mais recursos do sistema.
  3. Evite consultas com um número grande Tabelas relacionadas - Se você esta tentando criar um form no qual os dados retornados são oriundos de uma consulta que usa o relacionamente entre 10 tabelas , você não pode reclamar se isto se tornar um tanto lento.
  4. Evite ordenações quando possível - Ao usar consultas ordenadas ( cláusula ODER BY ) você esta de uma forma ou outra degradando o desempenho, quando não for necessário evite-as.
 
Controles Vinculados

Os controles vinculados ( Data Control) são eficientes para pequenas aplicações e protótipos , mas para aplicações mais robustas você evitará muita dor de cabeça se evitar usá-los, veja por que :

  1. Com o Data Control a atualização dos dados é automática sem ele você controla a atualização de seus dados
  2. Você estará reduzindo problemas com bloqueios de páginas em um ambiente de rede.
  3. Você pode usar transações tendo o controle sobre elas, o Controle de Dados usa transações implícitas.

Sem contar que mesmo usando o Data Control você terá que codificar (via DAO ) o preenchimento de controles, a navegação pela base de dados, a atualização e inclusão de dados em sua base de dados.

É... tudo tem o seu preço !!!