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

MySQL Discussion :

Structure physique d'un index


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Structure physique d'un index
    Bonjour,
    J'aimerais savoir comment est physiquement structuré un index dans la machine.

    Pour préciser ma question, je travaille actuellement sur de très grosses tables (plusieurs dizaines de millions de lignes) provenant de la fusion de fichiers texte. Il n'y a aucune clé primaire et encore moins en entier auto-incrémenté.
    La clé candidate est sur deux colonnes, l'une en char(2) et l'autre en char(12).

    J'ai construit un nouveau modèle de données normalisé et je suis en train de transférer les données des tables source vers la nouvelle base.
    Si je fais des requêtes sans index, c'est hyper long.
    L'ajout d'index sur les tables source prend également beaucoup de temps. J'ai un fichier d'index qui fait 1,5 Go.

    Une requête, avec jointure entre la base source et la nouvelle base, pour préparer dans une table temporaire les lignes à ajouter à une table de la nouvelle base a pris plus de 14 heures !

    Je me demandais donc si ce serait plus rapide en créant une clé primaire artificielle entière auto-incrémentée dans la table source, plutôt qu'en se basant sur une clé primaire double sur deux colonnes CHAR.
    A noter : cette clé primaire ne me servira pas directement dans les requêtes d'importation.

    Pour en revenir à ma question de départ :
    Est-ce que les index supplémentaires qui m'aideraient à accélérer les requêtes d'importation seraient physiquement construits sur ma clé primaire auto-incrémentée ou bien les index sont-ils déjà physiquement construits à l'aide d'un numéro de ligne inaccessible à l'utilisateur ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 947
    Par défaut
    Une PK en auto-incrément ne permet que d'assurer l'unicité dans la table.

    Dans ton cas, je ne vois pas bien en quoi elle améliorera les perfs (au contraire: + de datas à "trainer", index de PK inutilisé lors des jointures).

    Par contre, avec la clé candidate, hormis l'investissement initial pour contruire l'index, je n'y vois que des bénéfices.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    J'ai essayé la clé double mais MySQL a tourné un (long) moment avant de m'afficher une page blanche (phpMyAdmin). Je réaffiche la table : pas d'index !

    Du coup j'ai passé la journée à indexer chaque colonne utile pour mon import et je n'ai pas fini. Ca continuera à tourner chez moi cette nuit (je prépare les données sur un portable).

    Le fichier d'index fait déjà près de 3 Go pour un fichier de données de 5,4 Go (53 millions de lignes).

    Je vais commencer à importer ce soir pour voir si mes index font gagner un peu de temps avant de poursuivre l'indexation sur les colonnes qui manquent mais qui interviennent dans une deuxième phase d'importation.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Par défaut
    non une colonne en auto increment ne t'aidera pas. Pas plus que des index si ils ne sont pas filtrants.

    La solution la meilleure serait de partitionner ta table :
    http://krierjon.developpez.com/mysql/partitionnement/
    Uniquement en 5.1, MySQL est assez en retard sur le sujet...

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    J'ai lu avec beaucoup d'intérêt hier cet article sur le partitionnement.
    1er problème : il faudrait que nous passions notre serveur en version 5.1
    2ème problème : les requêtes qui seront faites ne sont pas encore complètement connues et j'ai lu que le partitionnement est efficace surtout s'il est effectué en fonction des requêtes les plus fréquentes.

    Mais je garde la solution en réserve pour la base finale.

    J'ai écrit un autre appel à l'aide concernant la performance après des premiers tests effectués sur la plus grosse table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Par défaut
    le partitionnement est interessant si toutes les recherches effectuées utilisent la clé de partitionnement pour filtrer les données.

    Si tu fais (par rapport à ton 2eme post) un count(distinct) . Meme sur une table partitionnée, ca n'ira pas beaucoup plus vite. Ca ira plus vite parce qu'il pourra paralléliser les opérations d'IOS mais il sera obligé de tout lire, tout trier, dédoublonner...

Discussions similaires

  1. Structure physique d'un héritage de tables
    Par CinePhil dans le forum Administration
    Réponses: 3
    Dernier message: 05/08/2010, 16h10
  2. Structure physique des cubes OLAP
    Par h_ismaili dans le forum Conception/Modélisation
    Réponses: 12
    Dernier message: 21/07/2009, 13h00
  3. Structure récupérer l'index d'un élément
    Par soeursourire dans le forum MATLAB
    Réponses: 1
    Dernier message: 26/06/2007, 11h13
  4. [Structure] Structure d'index XML
    Par copin dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 16/01/2007, 14h21
  5. Import de structure d'index d'ORACLE à MSSQL 2000
    Par vincentvouthier dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 17h11

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