CONSULTA LENTA - EM REDE

JOHNSTEVE 07/06/2017 18:55:40
#474383
Boa noite galera, gostaria de uma opnião de vocês.

é que minhas telas de consulta de Produtos, está super Lenta.....

Gostaria de saber como vocês utilizam a função para localizar os produtos no grid...
estou usando assim.. no Evento [Ô]KeyPress[Ô]
Banco de Dados contem na tabela de Produtos 18.000,00 produtos cadastrados. uso banco de dados Access em Rede, são 2 computadores.

   Private Sub txt_descricao_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txt_descricao.KeyPress
If txt_descricao.Text.Trim() <> [Ô][Ô] Then
PPesquisa_Produtos()
PFormataGridView()
selecionaLinha()
End If
End Sub


Private Sub PPesquisa_Produtos()
Using con As OleDbConnection = GetConnection()
Try
con.Open()
Dim sql As String = [Ô]SELECT codigo,descricao,Format(PrecoVenda, [ô]###,##0.00[ô]) as PrecoVenda,codBarra FROM produtos WHERE descricao LIKE [ô]%[Ô] & txt_descricao.Text & [Ô]%[ô][Ô]

Dim cmd As OleDbCommand = New OleDbCommand(sql, con)
Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
dgvProdutos.DataSource = dt

Catch ex As Exception
MsgBox([Ô]erro ao consultar produto pela descrição[Ô])
Finally
con.Close()
End Try
End Using
End Sub
KERPLUNK 07/06/2017 19:00:56
#474384
Use um limitador na query
JOHNSTEVE 07/06/2017 19:56:35
#474387
Citação:

:
Use um limitador na query



Kerplunk, fiz assim e tive um otimo resultado... um brother me deu essa dica.
If txt_descricao.Text.Trim().Length > 2

   If txt_descricao.Text.Trim().Length > 2 Then
PPesquisa_Produtos()
PFormataGridView()
selecionaLinha()
End If


NILSONTRES 08/06/2017 08:50:51
#474390
O que vc fez ai foi apurar a consulta já que vc utiliza like, vc pode aumentar isso isso com > 3 ou até mesmo 4 para filtrar com mais precisão.
GUIMORAES 08/06/2017 09:10:03
#474394
JOHNSTEVE

Bom, na minha opinião fazer uma query sem limitação de registros é dar um tiro no próprio pé, principalmente em um banco de dados com 18 mil produtos. Por experiência própria, ninguém vai ver mais que 1000 registros filtrados em uma tela, principalmente se ela for uma tela para a [Ô]selecionar[Ô] apenas um registro.
Agora, se tratando de um relatório, você pode paginar estas informações, da um pouco mais de trabalho, mas o resultado é ótimo.
O que você pode fazer para melhorar a velocidade é indexar corretamente os campos, isto auxilia muito na velocidade da consulta.
JOHNSTEVE 08/06/2017 18:41:40
#474405
Citação:

:
O que vc fez ai foi apurar a consulta já que vc utiliza like, vc pode aumentar isso isso com > 3 ou até mesmo 4 para filtrar com mais precisão.



anram Nilson, eu fiz com 3 e com 4 . no meu ponto de vista deu uma melhorada e grande...
Eu estou utilizando essa consulta no PDV Frente de Caixa. pesquisando pela Descrição do Produto . aqueles que não tem Código de Barras

JOHNSTEVE 08/06/2017 18:45:02
#474406
Citação:

:
JOHNSTEVE

Bom, na minha opinião fazer uma query sem limitação de registros é dar um tiro no próprio pé, principalmente em um banco de dados com 18 mil produtos. Por experiência própria, ninguém vai ver mais que 1000 registros filtrados em uma tela, principalmente se ela for uma tela para a [Ô]selecionar[Ô] apenas um registro.
Agora, se tratando de um relatório, você pode paginar estas informações, da um pouco mais de trabalho, mas o resultado é ótimo.
O que você pode fazer para melhorar a velocidade é indexar corretamente os campos, isto auxilia muito na velocidade da consulta.



GUIMORAES, vc poderia da um exemplo como poderia fazer em Indexar os campos..
o que você acha ? Limitar no Filtro?
oq vc me falou tem toda a razão nenhum Operador de Caixa. vai olhar 1000 produtos numa lista..

eu estou Fazendo isso no PDV Frente de Caixa.. porque nesse Cliente, ele tem muitos Produtos la sem Código de Barra. dai ele pesquisa pela Descrição do Produto

Você tem algum exemplo de Query para essa Situação ? que melhore o Desempenho na consulta no Filtro ..

Agradeço desde de já a todos
GUIMORAES 09/06/2017 11:12:16
#474417
Pelo que vi, você usa access, então vou passa o exemplo abaixo.

  
[ô]Selecionar os primeiros 500

SELECT TOP 500 id, descricao FROM produtos
WHERE nome like [ô]%BOLACHA%[ô]



Para criar um indexador (Se pesquisar isto no google vai achar um rio de informação, mas segue exemplo)

  
create index idx_produtos_descricao on produtos(descricao)


Agora, se nada disto melhorar, verifique a estrutura da rede (Roteadores, Switch, cabeamento). Se estiver no wi-fi, pode limitar bem esta pesquisa, pois a transferência por este tipo de rede é um pouco mais demorada que em uma rede física.
NILSONTRES 09/06/2017 11:56:03
#474418
Então, mas para busca em um caixa de venda o Top não pode ser utilizado, ira carregar apenas 500 registros no exemplo, a não se que faça paginação. Caso contrario ira esconder produtos.
Se é o que eu entendi.
GUIMORAES 09/06/2017 13:30:38
#474419
Citação:

:
Então, mas para busca em um caixa de venda o Top não pode ser utilizado, ira carregar apenas 500 registros no exemplo, a não se que faça paginação. Caso contrario ira esconder produtos.
Se é o que eu entendi.



Sim, por este motivo que a paginação é a melhor escolha.
Hoje trabalho assim, limitando a pesquisa, e tenho clientes que possuem mais de 45000 produtos cadastrados, e isto não influencia na busca. é claro, são rara as exceções onde é necessário realizar a pesquisa, pois se é PDV, exijo o uso do código de barras, mas sempre há exceções.
Se o operador sabe o que ele está pesquisando, ele vai digitar boa parte do nome do produto, e não apenas as iniciais, e isto não interfere na pesquisa, já que ninguém vai olhar os 500 produtos.
O que também pode ser feito é aguardar alguns segundos após a digitação para a pesquisa, assim dá tempo do usuário escolher o feijão no teclado e o sistema processar o resultado sem [Ô]travar[Ô].
JOHNSTEVE 11/06/2017 12:03:05
#474438
Citação:

:
Pelo que vi, você usa access, então vou passa o exemplo abaixo.

  
[ô]Selecionar os primeiros 500

SELECT TOP 500 id, descricao FROM produtos
WHERE nome like [ô]%BOLACHA%[ô]



Para criar um indexador (Se pesquisar isto no google vai achar um rio de informação, mas segue exemplo)

  
create index idx_produtos_descricao on produtos(descricao)


Agora, se nada disto melhorar, verifique a estrutura da rede (Roteadores, Switch, cabeamento). Se estiver no wi-fi, pode limitar bem esta pesquisa, pois a transferência por este tipo de rede é um pouco mais demorada que em uma rede física.



Boa GUIMORAES, vou verificar a Rede se estão utilizando Via WIFI. ou se esta na rede Física. cabiamento.
sim e é claro irei fazer um teste com o TOP 500 ou ate menos TOP 300, pois nenhum operador não irá verificar 500 produtos no caixa. sendo que tem q ser uma venda rapida.



Muito Obrigado pelas Dicas amanha mesmo irei visitar esse cliente. e fazer os testes
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas