2008-11-03 6 views
4

J'utilise SQLite pour un certain nombre d'applications sur le bureau et le PDA. La plupart des opérations sont en lecture seule, car SQLite fonctionne comme un magasin de données pour le matériel de référence dans mes applications. Fondamentalement, je cherche des suggestions sur l'amélioration des performances dans un scénario où vous savez que l'accès aux données est seulement en lecture seule.Optimisation Sqlite: scénario en lecture seule

Peut-être via différents paramètres pragma? etc ...

Les performances de SQLite sont excellentes, mais sur le PDA lorsque vous avez plusieurs bases de données, je peux voir une petite baisse de performance. Je ne pense pas que ce soit un problème avec SQLite, juste la réalité de la vitesse d'un PDA. Cependant, cela étant dit, il existe peut-être des façons de l'améliorer.


Bon conseil et bien placé. J'espère quelque chose de plus spécifique en disant au moteur ce que je fais. Par exemple, il n'y aura pas d'écritures multiples dans la base de données, ni de modification de la gestion du cache. Cependant, je suis heureux que vous ayez attiré l'attention sur l'aspect "conception" de la base de données comme problème principal.

+0

Avez-vous essayé de normaliser les données? – Quibblesome

Répondre

-1

vous pouvez appeler sqlite3_open_v2() avec le drapeau SQLITE_OPEN_READONLY. Je n'ai aucune idée si sqlite3 utilise réellement cela pour optimiser son comportement, ou juste pour définir les permissions appropriées sur l'appel ouvert qu'il fait au système d'exploitation.

+1

Non, sqlite3_open_v2() avec l'indicateur SQLITE_OPEN_READONLY n'améliore pas du tout les performances, juste une sécurité supplémentaire. –

2

Les conseils de performance de base de données standard s'appliquent encore:

  • Assurez-vous que vos requêtes utilisent des index plutôt que des scans de table
  • Soyez aussi sélectif que vous pouvez dans vos requêtes si vous n'êtes pas en tirant des lignes inutiles de les db
  • Sélectionnez uniquement les colonnes que vous voulez
2

sqlite3_open_v2() avec l'indicateur SQLITE_OPEN_READONLY modifie la façon dont SQLite gère les verrous opportunistes sans réelle amélioration des performances. Vous pouvez utiliser un pragma cache_size si vous faites beaucoup de lectures ou en fonction de la taille de la db faire une copie en mémoire de la base de données en utilisant l'option: memory open.