Jump to content

Optimisation DB Sqlite3


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.

Link to comment
Share on other 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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...