OPTIMIZAR BUSCA NA BD

USUARIO.EXCLUIDOS 21/12/2006 10:03:44
#191403
No meu programa estou criando uma funcionalidade para pesquisa de clientes por diversos campos da tabela de clientes e outras.

Na busca tenho de usar a condicao do sql "NOT IN", mas esta fica muito demorada e por vezes bloqueia a máquina. Para melhorar sei que posso fazer isso atraves da criacao de idices na base de dados, mas não sei o que devo ter em conta para saber em que colunas crio indices.

Alguém me sabe dizer?
Obrigadão
LIONHEART 21/12/2006 10:12:27
#191409
primeiro, vc deve identificar os campos da chave primaria.
depois, identificar quais campos serão consultados diversas vezes.

por ultimo, colocar em ordem, primeiro a chave, depois os campos.
USUARIO.EXCLUIDOS 21/12/2006 10:15:12
#191411
Bruno,
Vc deve criar os indices para os campos que tem maior incidência de consulta. Agora se vc não tem nada específico, sugiro que crie índices e faça testes. Outra sugestão é usar ao máximo Stored Procedures e dê preferência a um servidor "parrudo"
USUARIO.EXCLUIDOS 21/12/2006 10:30:11
#191418
Esqueci dizer q tou usando access.

Sei q devo criar indices para os campos que tem maior incidência de consulta, mas a minha duvida é se isso deve ser apenas sobre os campos usados dentro da condição "WHERE"? Os campos que o meu "SELECT" devolve não tem influência? os índices são precisos apenas para as condições de busca inseridas após o "WHERE"?

Obrigadão
USUARIO.EXCLUIDOS 21/12/2006 11:07:21
#191429
Resposta escolhida
Bruno, se vc utiliza access em uma aplicação multi-user com o arquivo .mdb em uma pasta compartilhada na rede vc NÃO está utilizando a tecnologia correta por questões de desempenho e segurança.

Procure no tópico MELHOR BANCO criado pelo MATIOLI o meu último post da página pois lá descrevo detalhadamente a questão.

àndices não funcionam plenamente neste tipo de configuração uma vez que o acces irá processá-lo no cliente e isto quer dizer que todas as tabelas e seus registros deverão percorrer a rede para ser processada no micro chamador.

A regra para indexação é simples:

1o O primeiro INDEX deve ser a chave primária e deve ser clusterizado (ordenação física dos registros)

2o Os demais INDEXES (não clusterizados)devem ser todos os campos que serão utilizados na clausula WHERE de consultas SQL (Atente ao fato que cada index ocupa mais espaço em disco e que INSERT, DELETE e UPDATES tem seu desempenho comprometidos uma vez que o index deve ser recalculado no exato momento em que estas operaçoes são chamadas).

Tente evitar instruções do tipo "NOT IN" , OR ... etc pois ignoram ou degredam a boa utilização de indexes.

Poste a consulta em outro tópico e peça ajuda que a gente tira este NOT IN da clausula WHERE
USUARIO.EXCLUIDOS 21/12/2006 13:41:35
#191478
Valeu EMERSON_TADEU! Esclareceu minha dúvida e me ensinou mais um pouco.

Obrigado!
Tópico encerrado , respostas não são mais permitidas