2017-07-26 3 views
0

Dans mon application, je suis confronté à un problème de performance lors du chargement depuis la base de données. J'ai une liste en utilisant RecylerView et un curseur pour les données. Une fois que le nombre d'enregistrements dépasse 1000, la liste devient trop lente à charger ou pour n'importe quelle opération. La requête utilise cette clause WHERE: COL1 = something AND (COL2 LIKE something OR col3 LIKE something OR col4 LIKE something) AND col5 is NOT NULLdéfinition de l'index pour la table

Quelle serait la manière idéale de définir un index dans ce cas pour obtenir de meilleures performances? Également réduire le nombre de colonnes dans le résultat de la requête améliorer les performances?

+0

RecyclerView.Adapter – png

+0

J'ai un adaptateur personnalisé qui étend RecyclerView.Adapter – png

+0

u veut dire une méthode particulière ou l'ensemble de l'adaptateur? – png

Répondre

0

Les index peuvent faciliter la recherche ou le tri. Dans votre requête, col1 doit être indexé, éventuellement col5 si de nombreuses lignes avec une valeur NULL peuvent être filtrées. (Une requête ne peut utiliser qu'un seul index par table, ce qui nécessite donc un index à deux colonnes.)

Un index ne peut pas aider avec une vue de liste lente, car il ne réduit pas la quantité de données que la liste charges de la DB.

Pour accélérer la liste, vous devez réduire le nombre d'entrées. Voir dynamic listview adding “Load more items” at the end of scroll pour savoir comment retarder le chargement des entrées, mais la solution optimale serait d'ajouter de meilleurs filtres afin de ne jamais avoir besoin de charger autant d'entrées. (Comment l'utilisateur est censé les manipuler de toute façon?)