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 :

Diviser alphabétiquement les entrées dans des tables différentes ou juste utiliser un index?


Sujet :

SQLite

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut Diviser alphabétiquement les entrées dans des tables différentes ou juste utiliser un index?
    Salut à tous,

    J'ai une table SQLite de 1,600,000 entrées. Je cherche à réduire le temps des requêtes select. Je voudrais me renseigner avant d'entreprendre quoique ce soit.

    Mon index principal est une colonne de string.

    Est-ce que ça peut valoir le coup du point de vue des perfs d'éclater ma table selon les premières lettres de chaque string, soit table A, table B etc. (tout en conservant l'index dans chacune bien sûr)?

    par avance, merci

  2. #2
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    Bonjour,

    Moi je commencerais par analyser les requêtes et mettre des index sur les bonnes colonnes. C'est à dire sur les colonnes impliquées dans les clauses WHERE de tes requêtes.

    Cela ne coûte pas grand chose en temps de test, tu crées les index et si ça ne va pas tu les supprimes.

    Ensuite seulement il faudra envisager d'autres solutions mais je ne pense pas que faire 26 tables soit une bonne idée car tu seras bien embêté le jour où tu voudras faire une requête qui ramène des lignes qui ne commencent pas toutes par la même lettre.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Merci pour ta réponse, Ed.

    A vrai dire, j'en suis déjà à l'étape 2: la table ayant grossi, j'ai pas mal rallongé mes temps de requête. Non pas que j'ai un temps minimal, mais le plus court est le mieux.

    Comme les seules requêtes faites sur cette table utilisent l'index et colonne de string en clause WHERE, je voulais savoir si ce type d'approche est pratiqué.

    Je ne pense pas avoir besoin de requêtes globales (sur une autre propriété que mon index) mais si je devais y venir, quid d'une table virtuelle? Est-ce que virtuelle = en RAM?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    En somme, et vous aurez remarqué que je n'y connais pas grand chose, j'ai plusieurs options, quelle serait la plus rapide:

    - créer une seule grosse table avec index
    - créer une table par lettre de l'alphabet avec chacune un index
    - créer une table virtuelle par lettre de l'alphabet avec chacune un index
    - Créer des vues par lettre de l'alphabet avec chacune un index?

  5. #5
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    C'est pas facile à dire sans savoir à quoi sert ta table et le type de requêtes que tu exécutes.

    As-tu réfléchi à un modèle relationnel qui pourrait remplacer ton énorme table avec tout dedans ?

  6. #6
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    C'est une table dans laquelle j'utilise uniquement des select. Pour des raisons de prise en charge des majuscules et accents en français, j'ai trois colonnes dans lesquelles j'ai des requêtes à faire. Les trois ont un index. Et les trois sont une transformation du même point d'entrée, une string.

    Le modèle relationnel ne me semble pas pertinent, mais je peux me tromper. Pour répondre à ma question, j'ai fait le test en comparant la vitesse des requêtes sur un mot qui commence par 'a' dans une table avec tous les mots, et une table avec uniquement les mots commençant par "a". Pas de gain de performance, je suppose que c'est dû à l'index qui fonctionne déjà comme ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Regle de validation sur des champs dates dans des tables différentes
    Par ingal30 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2010, 18h42
  2. Réponses: 2
    Dernier message: 14/02/2010, 19h30
  3. champ dans des tables différentes
    Par pepsister dans le forum IHM
    Réponses: 2
    Dernier message: 12/02/2010, 10h01
  4. Insertions Paralleles dans des tables Différentes
    Par saidi.seifeddine dans le forum SQL
    Réponses: 4
    Dernier message: 14/05/2009, 11h41
  5. Prob avec les calcules dans des tables fils
    Par lou_delphdev dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/07/2007, 07h55

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