Resolvido - Otimizar consulta no banco SQLite

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

Alguém tem dicas de como otimizar essa consulta?

Criar índices para para as colunas de filtros de sua consulta SQL pode ser uma solução, caso ainda não tenha isso implementado!

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

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 ?
1 curtida

Realmente vc tem razão em relação a isso, vou tentar uma forma de paginação.
obg pela ajuda, abriu minha mente.

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.

Código fonte no Git para exemplificar.