Olá pessoal, tenho uma aplicação que possui uma base de dados com 4 mil produtos cadastrados, meu problema é no tempo que o sqlite lista os produtos ativos e em ordem de ascendência do banco, pois está demorando em media 7 segundos.
codigo:
SELECT _id, descricao, referencia, quantidade, preco_venda, peso_bruto, preco_promocao, preco_especial, inativo, id_secao, unidade_comercial FROM produto WHERE inativo = 0 ORDER BY descricao ASC
Criar índices para para as colunas de filtros de sua consulta SQL pode ser uma solução, caso ainda não tenha isso implementado!
G
germanomelo
Criei um indice mas não resolveu
CREATE INDEX produto_cod_desc ON produto (_id, descricao)
Tem algo errado com esse indice?
Criei ate uma view para ver se ajudava, porem tbm não deu resultado
CREATE VIEW produtos_all_active
AS
SELECT _id, descricao, referencia, quantidade, preco_venda, peso_bruto, preco_promocao,
preco_especial, inativo, id_secao, unidade_comercial
FROM produto
WHERE inativo = 0
ORDER BY descricao ASC
J
Solucao aceita
Jonathan_Medeiros1 like
O índice deve ser aplicado nas colunas de filtragem, ou seja, as que ficam na cláusula WHERE do bloco SQL, nesse caso o índice que você criou não está nem sendo utilizado!
Outra coisa a se pensar que pode ajudar:
é realmente necessário sempre apresentar todos os produtos nessa consulta ?
hoje são 4 mil produtos, amanhã podem ser 10, 20, 30 mil produtos… Isso é realmente necessário ?
G
germanomelo
Realmente vc tem razão em relação a isso, vou tentar uma forma de paginação.
obg pela ajuda, abriu minha mente.
G
germanomelo
Pra quem desejar saber como eu resolvi, eu usei um RecyclerView que ao carregar o ultimo item da lista ele dispara uma consulta ao banco pegando os próximos 100 itens e adiciona a lista e ao RecyclerView, fazendo isso toda vez que chegar ao ultimo item da lista.