Aller au contenu

Optimisation DB Sqlite3


thomas.l

Recommended Posts

Bonjour,

J'ai quelques questions concernant l'optimisation d'une base sqlite3 pour ceux qui se seraient éventuellement penchés sur le sujet :

1/ Vaut-il mieux faire des unions ou des jointures externes ? Ici ce serait la performance qui m'intéresserait

2/ Vaut il mieux créer des tables de constantes (ex : TYPE(id, name)) pour économiser la place des doublons de chaines dans la table appelante, au risque d'alourdir les requêtes et la lisibilité globale de la base, et sachant que les tables (de constantes) même quasi vides prennent pas mal de place ? Ou ne pas se prendre la tête et dupliquer ma VARCHAR dans la table appelante ? Ici c'est la taille de la db et la rapidité d'éxécution qui m'intèressent.

3/ Y'a-t-il des contre-indications à l'utilisation de vues ? J'ai des vues un peu complexes qui se requêtent les unes les autres, j'optimise leurs requêtes en ce moment car je l'ai écrites à la va-vite et elle rament donc un peu mais j'ai pas envie d'y passer du temps s'il existe des raisons évidentes à ne pas utiliser les vues du tout. (Pour l'instant les optimisations sont tout à fait satisfaisantes)

Merci de vos réponses.

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas vraiment eu le temps d'y travailler depuis, c'est pourquoi je n'ai pas répondu mais pour le /2, un test facile:

je créé une base avec 1 table : ANIMALS (ID INTEGER PK, TYPE VARCHAR)

j'en créé une autre avec 2 tables TYPES(ID INTEGER, NAME VARCHAR), ANIMALS(ID INTEGER, TYPE INTEGER REFERENCES TYPES(ID))

Pour ~1000 entrées dans ANIMALS avec le même type (un nom d'une 20aine de caractères par exemple), la base 1 est deux fois plus grosse que la deuxième. Logique vu qu'on répète 1000 fois la chaine de caractères dans la 1 et une seule fois dans la 2. Mais la taille que prennent les tables elles mêmes, juste parce qu'elles existent, est importante et pour moins de données c'est moyennement intéressant d'essayer d'optimiser.

Maintenant faut voir les perfs à faire les jointures dans la base 2 si c'est rentable comme optimisation.

Pour le 3/, en retravaillant les requêtes constituant les vues j'obtiens une réponse instantanée alors qu'il y a un produit cartésien entre des vues d'union de vues de vues et des unions dans tous les sens (même si il n'y a pas des millions d'entrées). Je suis assez impressionné de voir les perfs de la db sur le mobile. Manque juste les triggers récursifs à sqlite.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...