Resolvido - Otimizar consulta no banco SQLite

5 respostas Resolvido
sql
G

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?

5 Respostas

J

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

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

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

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

G

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.

Criado 9 de agosto de 2018
Ultima resposta 10 de set. de 2018
Respostas 5
Participantes 2