USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Índices e chave primária
Josefh Hennyere
Pontos: 2843
SALVADOR
BA - BRASIL
Postada em 12/05/2005 07:00 hs         
Qual a importância de se criar índices e chaves primárias em um Banco de dados Access que só vou utilizá-lo para consulta. Vou ser mais claro: Tenho um DB que utilizo para consulta de ceps. Na tabela ceps constam todos os dados que preciso.
 
Nome da tabela:
ceps
 
Campos da minha tabela:
Tipo
Logradouro
Complemento
Cep
Bairro Inicial
Bairro Final
Localidade
Uf
 
Índices que criei:
Cep
Localidade
Logradouro
Uf
 
Chave Primária:
Cep
 
Instrução utilizada pelo vb para consultar esta tabela:
"SELECT ceps.Tipo, ceps.Logradouro, ceps.Complemento, ceps.Cep, ceps.BairroInicial, ceps.BairroFinal, ceps.Localidade, ceps.UF from ceps WHERE (((ceps.Cep) = '" & txtConsulta.Text & "'))"
 
Esta consulta está certa, ou poderia aperfeiçoa-la?

Lembro que esta tabela contém mais de 633.000 registros e quando o sistema não acha o valor de cara dá uma pequena travadinha.
 
Instrução Do usada:
Do While Not (Rs.EOF And Rs.BOF)
DoEvents
                 -Código
Loop
 
Qual melhor: "And" ou "Or"
Do While Not (Rs.EOF And Rs.BOF) ou Do While Not (Rs.EOF or Rs.BOF)
 
Grato!
     
Martini
Pontos: 2843 Pontos: 2843
PAROBÉ
RS - BRASIL
Postada em 12/05/2005 10:13 hs         
com um índice as consultas a execução de consultas tem melhor desenpenho ... uma chave primária evita duplicidade de dados
     
7Cordas
PORTO ALEGRE
RS - BRASIL
Postada em 12/05/2005 12:17 hs            
Cara, os indices e as chaves primarias é exatamente como o martini disse. No acces uma chave primária tem outros papéis além de evitar a duplicidade de dados, mas não vem ao caso comentar.
Mas é super normal que uma tabela de 633.000 trave um pouco o sistema. O que ajuda é não selecionar todos os campos da tabela na select. Quanto mais campos DBEngine tiver que trazer mais demorado fica a consulta.
Outra coisa que ajuda muito é utilizar um "Cache" de consultas. Por exemplo:
Sempre que for feita uma consulta , grava-se os dados resultantes em uma tabela de estrtura exatamente igual a tabela de CEP. Sempre que se abrir a tela (FORM) de consulta de ceps se carrega em um Combo os CEPS desta segunda tabela. Daí quando for feita a consulta se verifica se o cep informado está no combo. Se estiver vc busca da segunda tabela(que terá bem menos registros).
 
Espero ter ajudado

Cristiano Fischer
Projeto SIGA - Sistemas Integrados de Gestão
     
Josefh Hennyere
Pontos: 2843
SALVADOR
BA - BRASIL
Postada em 13/05/2005 05:19 hs         
Valeu Cristiano, não tinha pensado em criar um "Cache", a dica foi boa. Em relação à consulta, acho que deu uma pequena melhorada. Acrescentei o termo "ORDER BY".
 
Em relação aos índices, ainda tenho uma pequena dúvida.
 
Imagine que minha tabela de ceps contém todos os estados, então se clasificar a "Uf" como índice, e na instrução de consulta o termo "ORDER BY ceps.UF" o sistema apontará imediatamente para o índice "Uf", ou procurarar a uf até encontrá-la, para daí então seguir os outros pararâmetros da consulta?
 
Explicando melhor:
sendo txtConsulta = Ao cep que estou procurando,
na instrução:
"SELECT ceps.Tipo, ceps.Logradouro, ceps.Complemento, ceps.Cep, ceps.BairroInicial, ceps.BairroFinal, ceps.Localidade, ceps.UF from ceps WHERE (((ceps.Cep) = '" & txtConsulta.Text & "' and (ceps.UF) = "SP")) ORDER BY ceps.UF"
 
O sistema referencia imediatamente ao estado que especifiquei na consulta, consultando apenas onde o estado for SP sem precisar verificar os outros estados? ou procura na tabela toda (630.000 registros) separando aonde o estado for = SP prá daí então procurar o valor (txtconsulta)?
 
Grato!
 
 
 
     
Página(s): 1/1    

CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página