OPTIMIZAR BUSCA NA BD
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
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
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.
depois, identificar quais campos serão consultados diversas vezes.
por ultimo, colocar em ordem, primeiro a chave, depois os campos.
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"
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"
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
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
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
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
Valeu EMERSON_TADEU! Esclareceu minha dúvida e me ensinou mais um pouco.
Obrigado!
Obrigado!
Tópico encerrado , respostas não são mais permitidas