Bom dai a todos... desde já muito grato pela atenção. Eu estou a usar uma consulta para carregar um listBox na inicialização do formulário, logo essa consulta esta fazendo uma busca em uma tabela que já tem um volume grande de dados, consequentemente essa consulta esta muito lenta, creio eu porque estou fazendo uso do distinct para eliminar duplicidade. alguém pode me ajudar a encontra uma forma de usar o distinct de uma forma que torne essa consulta mais rápida... logo preciso de algum forma eliminar as duplicidade de registro na exibição do listBox.
3 participantes
[Resolvido]Select distinct deixando consulta lenta
eriberto- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 72
Registrado : 04/07/2013
- Mensagem nº1
[Resolvido]Select distinct deixando consulta lenta
Alexandre Fim- Developer
- Respeito às regras :
Sexo :
Localização :
Mensagens : 3491
Registrado : 13/12/2016
Eriberto bom dia,
Faz o seguinte:
1 - Entre no modo estrutura da tabela onde consta o campo que vc está fazendo o distinct.
2 - Ao clicar no campo, o Access exibe abaixo as Propriedades deste campo e procure a Propriedade "Indexado", que provavelmente deve estar como "Não". Mude para "Sim". Acredito que irá melhorar um pouco o desempenho da sua query.
Abraços,
Att,
Alexandre Fim
Faz o seguinte:
1 - Entre no modo estrutura da tabela onde consta o campo que vc está fazendo o distinct.
2 - Ao clicar no campo, o Access exibe abaixo as Propriedades deste campo e procure a Propriedade "Indexado", que provavelmente deve estar como "Não". Mude para "Sim". Acredito que irá melhorar um pouco o desempenho da sua query.
Abraços,
Att,
Alexandre Fim
eriberto- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 72
Registrado : 04/07/2013
Caro amigo Alexandre, fiz as alterações indicada mas a lentidão na consulta ainda permanece... abaixo vu postar o código da consulta que estou a usar para facilitar o entendimento.
- Código:
SELECT DISTINCT TOP 20 dbo_tblVendaEsp.codCliente, dbo_tblVendaEsp.nomeCliente, Format(dbo_tblVendaEsp.cpf,"000\.000\.000-00") AS cpf
FROM dbo_tblVendaEsp
WHERE (((dbo_tblVendaEsp.nomeCliente) Like "*" & Forms!FExcluiPreVenda!txtPesquisa & "*") And ((Format(dbo_tblVendaEsp.cpf,"000\.000\.000-00")) Like "*" & Forms!FExcluiPreVenda!txtPequisaCpf & "*") And ((dbo_tblVendaEsp.statusVenda)="F") And ((dbo_tblVendaEsp.numeroloja) Like "*" & Forms!FExcluiPreVenda!txtLoja & "*"))
ORDER BY dbo_tblVendaEsp.nomeCliente;
Noobezinho- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 4140
Registrado : 29/06/2012
Eriberto
Primeiro:Experimente tirar o a formatação do CPF da consulta.
Acredito que seja o fato de ter que fazer a formatação que faz com que a consulta demore.
Deixe essa formatação para a caixa de texto.
Teste sem a formatação, se continuar lenta, vá para a próxima tentativa, mas mantenha sem a formatação.
Segundo: Faça 2 consulta aninhadas, primeiro uma consulta seleção com esses critérios
WHERE (((dbo_tblVendaEsp.nomeCliente) Like "*" & Forms!FExcluiPreVenda!txtPesquisa & "*") And ((Format(dbo_tblVendaEsp.cpf,"000\.000\.000-00")) Like "*" & Forms!FExcluiPreVenda!txtPequisaCpf & "*") And ((dbo_tblVendaEsp.statusVenda)="F") And ((dbo_tblVendaEsp.numeroloja) Like "*" & Forms!FExcluiPreVenda!txtLoja & "*"))
ORDER BY dbo_tblVendaEsp.nomeCliente;
Novamente, retire a formatação, pois você pode definir a formatação na caixa de texto.
Teste esse consulta e veja sua velocidade em exibir o resultado.
Depois utilize essa consulta para retornar o top 20.
Editando:
Pode inverter a ordem da coisa:
Primeiro o top 20, isso vai reduzir os registros tremendamente.
Depois usando ele como base, outra consulta com os critérios.
[ ]'ds
Primeiro:Experimente tirar o a formatação do CPF da consulta.
Acredito que seja o fato de ter que fazer a formatação que faz com que a consulta demore.
Deixe essa formatação para a caixa de texto.
Teste sem a formatação, se continuar lenta, vá para a próxima tentativa, mas mantenha sem a formatação.
Segundo: Faça 2 consulta aninhadas, primeiro uma consulta seleção com esses critérios
WHERE (((dbo_tblVendaEsp.nomeCliente) Like "*" & Forms!FExcluiPreVenda!txtPesquisa & "*") And ((Format(dbo_tblVendaEsp.cpf,"000\.000\.000-00")) Like "*" & Forms!FExcluiPreVenda!txtPequisaCpf & "*") And ((dbo_tblVendaEsp.statusVenda)="F") And ((dbo_tblVendaEsp.numeroloja) Like "*" & Forms!FExcluiPreVenda!txtLoja & "*"))
ORDER BY dbo_tblVendaEsp.nomeCliente;
Novamente, retire a formatação, pois você pode definir a formatação na caixa de texto.
Teste esse consulta e veja sua velocidade em exibir o resultado.
Depois utilize essa consulta para retornar o top 20.
Editando:
Pode inverter a ordem da coisa:
Primeiro o top 20, isso vai reduzir os registros tremendamente.
Depois usando ele como base, outra consulta com os critérios.
[ ]'ds
.................................................................................
A pergunta que não quer calar:
Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
para enviar parte do projeto, não temos mais continuidade do tópico?
Crê que temos bolas de cristal ou está com medo que "roubemos" a
idéia/projeto dele?
Se é tão bom assim...
Ajude a ser ajudado:
Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
sem precisar procurar o mesmo.
eriberto- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 72
Registrado : 04/07/2013
Boa tarde Noobezinho... Realmente a lentidão da consulta esta ligado a formatação do campo cpf, fiz exatamente como você falou, logo a consulta ficou 350% mais rápido. mas como eu uso essa consulta para carregar um listbox, você poderia me da uma luz como faço para fazer essa formatação direto no listbox?
Noobezinho- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 4140
Registrado : 29/06/2012
No listbox não irá conseguir, ele é muito pobre.
Nunca vi fazer formatação de uma coluna.
Tem duas opções:
1- Fazer uma consulta atualização da tabela onde está o campo CPF e colocar a formatação nele. O que acho mais sensato.
2- Criar um formulário continuo e deixar o mesmo com aparência de um listbox.
Então poderá exibir o campo formatado.
[ ]'s
Nunca vi fazer formatação de uma coluna.
Tem duas opções:
1- Fazer uma consulta atualização da tabela onde está o campo CPF e colocar a formatação nele. O que acho mais sensato.
2- Criar um formulário continuo e deixar o mesmo com aparência de um listbox.
Então poderá exibir o campo formatado.
[ ]'s
.................................................................................
A pergunta que não quer calar:
Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
para enviar parte do projeto, não temos mais continuidade do tópico?
Crê que temos bolas de cristal ou está com medo que "roubemos" a
idéia/projeto dele?
Se é tão bom assim...
Ajude a ser ajudado:
Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
sem precisar procurar o mesmo.
eriberto- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 72
Registrado : 04/07/2013
Muito obrigado meu grande amigo... deu certinho antedeu perfeitamente... mais uma vez muito grato pela atenção e conhecimento prestado. sucesso pra você.
Noobezinho- Moderador
- Respeito às regras :
Sexo :
Localização :
Mensagens : 4140
Registrado : 29/06/2012
Que bom que deu certo!
Valeu o retorno!
Boa sorte !
Valeu o retorno!
Boa sorte !
.................................................................................
A pergunta que não quer calar:
Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
para enviar parte do projeto, não temos mais continuidade do tópico?
Crê que temos bolas de cristal ou está com medo que "roubemos" a
idéia/projeto dele?
Se é tão bom assim...
Ajude a ser ajudado:
Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
sem precisar procurar o mesmo.
eriberto- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 72
Registrado : 04/07/2013
Tópico resolvido.... muito obrigado ao amigo Noobezinho.