IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Fonctionnement interne des index dans SQLite


Sujet :

SQLite

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    DI retraité
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : DI retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut Fonctionnement interne des index dans SQLite
    Bonjour.
    Soit une base SQLite sous iOS, et une table de plusieurs dizaines de milliers de lignes comportant une colonne "code postal" de 5 caractères, et 4 colonnes de 1 caractère, chacune pouvant avoir seulement 2 ou 3 valeurs, comme un code sexe.
    Les valeurs de ces 5 colonnes ne changent quasi jamais. Ces 5 colonnes sont très fréquemment utilisées dans des clauses WHERE, mais pas forcément toutes en même temps.
    Pour une question de performance, il me semble nécessaire d'utiliser un/des index. Mais lesquels ?
    1) Créer un index sur chaque colonne, mais avec seulement 2 ou 3 valeurs différentes, ceci a-t-il un sens ?
    2) Créer un index sur les 4 colonnes, mais sera-t-il utilisé si la clause WHERE ne spécifie que la valeur de certaines d'entre elles ?
    3) Concaténer physiquement les 4 colonnes de 1 caractère en une seule colonne, construire un index sur cette colonne agrégée, et utiliser une clause WHERE avec un LIKE ? Outre que cette solution n'est pas très propre, SQLite utilise-t-il l'index quand un LIKE est spécifié ?
    4) Créer un seul index sur le code postal et les 4 colonnes de 1 caractère, et utiliser une clause WHERE avec un LIKE ? SQLite utilise-t-il l'index quand un LIKE est spécifié ?
    5) Autre ?
    Merci de votre aide,
    Gilbert

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Par défaut
    Je ne sais pas si SqlLite gère les vues. Sinon une vue par colonne.
    A défaut effectivement un index par colonne. Il faut oublier les like qui ne sont pas reconnus par les index.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    mon avis : outre bien évidement un index primaire unique numérique ? un index sur le code postal est justifiable.

    Une table peut peut-être se justifier pour certaines de ces colonnes d'un caractère ? auquel cas je verrais bien un contrainte de référence (qui construira un index ) sinon, non, je ne crois pas que l'ajout d'un index sur ces colonnes soit très "optimiseur" quoique vu le volume .... c'est vrai que l'on peut se poser des questions !

  4. #4
    Membre émérite
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Par défaut
    Bonjour,

    Il faut également se poser la question des combinaisons de critères réellement pertinentes (et éventuellement interdire les autres par un contrôle applicatif). Ensuite, il faut créer les index en fonction des combinaisons autorisées. Pour avoir une idée de ce qui se passe, tu peux faire des explain query plan select * from matable where critere1 = "" and critere2 = "" et voir ainsi quels index sont utilisés en fonction des combinaisons de critères.

    Bloon

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    D'une façon générale, un index peut filtrant n'a pas d'intérêt pour les recherches, mais il peut avoir un intérêt s'il est couvrant.

    Donc a priori ne créez pas d'index pour les colonnes n'ayant que deux ou trois valeurs possibles, mais par exception, ça peut présenter un intérêt.

    Concaténer les différentes colonnes est la solution à ne surtout pas choisir, ce serait un viol de la 1NF et une redondance d'information avec tous les risques que cela comporte.
    Faire des recherches vous obligerait à utiliser des OR multiples, rarement indexables et LIKE, s'il commence par '%' n'est pas indexable non plus !

Discussions similaires

  1. Utilisation des index dans les requêtes
    Par john_wili dans le forum SQL
    Réponses: 2
    Dernier message: 02/12/2008, 15h26
  2. Choix des index dans tables sans clés étrangères ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2008, 09h56
  3. Repérage des index dans les datatables
    Par GuyCo dans le forum Accès aux données
    Réponses: 1
    Dernier message: 05/10/2006, 23h12
  4. Fonctionnement interne des outils de gestions de paquets
    Par Spoutnik dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/03/2006, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo