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

Administration MySQL Discussion :

Index sur Tables non utilisées


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut Index sur Tables non utilisées
    Bonjour,

    Je viens de sauvegarder des tables de plusieurs Gigao Octets, ou plutôt renommées. Ces tables ont des index et ne seront plus utilisées , juste histoire d'avoir des backups au cas où.

    Vu que ces tables ont des index, vont'elles occupées de l'espace mémoire ? Ou bien uniquement lorsqu'elles sont utilisées ? Je pense qu'elles vont prendre quand même de l'espace mémoire, mais je pose la question histoire de lever mon léger doute

    Merci beaucoup

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Un index étant une redondance de certaines informations de la table, il prend au moins autant d'espace que les informations qui y sont stockées + une petit volume supplémentaire de données nécessaire à la navigation dans les données de recherche et un autre petit volume pour référencer la ligne originale de la table


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Par défaut
    merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    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 623
    Billets dans le blog
    10
    Par défaut
    L'espace occupé est d'autant plus grand que les colonnes des index sont larges et nombreuses et que l'index est multiple.
    du mieux : un index PK sur une colonne unique de type integer (voire small integer)
    au pire : un index multiple sur plusieurs colonnes de type (var)char
    et encore pire : les index full-text

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bonjour

    Pour être sur qu'il n'y ait pas d'incompréhension :

    La table et ses indexes vont certes occuper de l’espace sur le disque, mais ne devrait plus plus occuper d'espace en RAM si elles ne sont plus du tout utilisées...

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 900
    Par défaut
    Salut à tous.

    Citation Envoyé par omelhor
    Je viens de sauvegarder des tables de plusieurs Gigao Octets
    Ce que vous entendez par sauvegarde, est floue !
    S'agit-il d'un utilitaire (un backup) qui effectue la recopie de votre disque dur ?
    Ou bien utilisez-vous mysqldump (une sauvegarde) afin d'avoir un script sql ?

    Je recommande de désactiver les index de votre base de données lors du chargement de la base de données.
    Puis de réactiver ceux-ci quand le chargement sera terminée. Leur recréation se fera automatiquement et va vous faire gagner du temps.

    Citation Envoyé par omelhor
    Vu que ces tables ont des index, vont-elles occupées de l'espace mémoire ?
    Je suppose que vous parlez d'un backup. Dans ce cas là, la réponse est OUI.

    Citation Envoyé par omelhor
    Ou bien uniquement lorsqu'elles sont utilisées ?
    Pour pouvoir utiliser un index, celui-ci doit exister aupréalable.
    Et de ce fait, un index va occuper de la place.

    @+

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Si les tables ont été recopiées pour archiver des données à fin de backup uniquement (pas de consultation) j'ai envie de dire que vous pouvez vous lâcher sur le DROP INDEX… aucun intérêt de conserver des index qui ne servent à rien.

    Par contre, si c'est une table d'archive, qui peut être consultée, alors au contraire, il faut revoir les index et vérifier qu'ils correspondent bien aux besoins d'interrogation.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    ...
    Je recommande de désactiver les index de votre base de données lors du chargement de la base de données.
    Puis de réactiver ceux-ci quand le chargement sera terminée. Leur recréation se fera automatiquement et va vous faire gagner du temps.
    Ceci est généralement faux....

    En effet, la reconstruction d'index est un processus qui demande un tri des données et qui est consommateur de ressources et de temps...

    Si le CPU est peu véloce et comme MySQL ne sait pas faire du parallélisme, le coût en temps de la reconstruction des index peut être très supérieur à une restauration globale, tables et index....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 900
    Par défaut
    Salut SQLPRO.

    Citation Envoyé par SQLPRO
    Ceci est généralement faux....
    Je ne suis pas d'accord avec vous. Donc vous préférez, lors d'une restauration d'une table, que les index soient activées.
    Je peux vous assurer que cela va prendre un temps bien plus long puisque à chaque insertion, il y aura réorganisation de la table.
    Surtout si les lignes ne se présentent pas dans l'ordre de l'index cluster (celui de la primary key, puisque MySql ne fait pas la distinction).
    Le mieux est de trier les lignes avant de les charger, et d'activer les index quand la table est totalement chargée.

    @+

  10. #10
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut SQLPRO.

    Je ne suis pas d'accord avec vous. Donc vous préférez, lors d'une restauration d'une table, que les index soient activées.
    Je peux vous assurer que cela va prendre un temps bien plus long puisque à chaque insertion, il y aura réorganisation de la table.
    Surtout si les lignes ne se présentent pas dans l'ordre de l'index cluster (celui de la primary key, puisque MySql ne fait pas la distinction).
    Le mieux est de trier les lignes avant de les charger, et d'activer les index quand la table est totalement chargée.

    @+
    Dans la mesure où la sauvegarde se fait probablement dans l'ordre physique des données (donc selon l'ordre de l'index cluster), et que la restauration... va évidement se faire dans le même ordre que la sauvegarde, alors il ne va pas y avoir de fragmentation ni de besoin de réorganiser les lignes déjà écrites sur le disque (ce qui est le plus consommateur de tout).

    Reste alors le besoin de mettre à jour les index, et de les rééquilibrer de temps en temps au fur et à mesure de leur écriture... ça me semble clairement moins gênant !

    Le pire dans tout ça, c'est : que se passe-t-il si on crée la clé primaire (ou le premier index unique) après coup ?
    D'après la doc de MySQL, l'index cluster (donc l'organisation physique des données sur le disque) est obligatoirement la clé primaire si présente, le premier index unique créé sinon, et enfin une clé primaire "technique" générée à partir d'une colonne "technique" généré automatiquement par MySQL (donc une augmentation inutile de données à stocker). Que se passe-t-il alors si on crée la clé primaire à postériori ? 9 chances sur 10 que ça se traduire par une réorganisation compète des données sur le disque, ce qui sera infiniment plus lent que de rééquilibrer un index... (d'autant qu'à ce moment tous les index doivent être mis à jour, puisque tous référencent la clé primaire... qu'on vient de créer).
    Ce serait très surprenant que MySQL ne fasse pas ça, sinon il laisserait le choix de l'index cluster, puisque ça revient au même.

  11. #11
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 900
    Par défaut
    Salut StringBuilder.

    Je fais cette constatation sous MySql : si les index sont activés durant la restauration de la table, cela prendra beaucoup plus de temps que de désactiver les index durant la restauration de la table, puis de les réactiver ensuite.

    @+

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

Discussions similaires

  1. Utilisation des index sur tables à jeux de caractères différents
    Par globule71 dans le forum Administration
    Réponses: 0
    Dernier message: 11/07/2008, 10h28
  2. [RegEx] Requête SQL sur tables non connues à l'avance (regex)
    Par lothar59 dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2007, 10h33
  3. Remonter warnings sur variables non utilisées
    Par titomcmoi dans le forum MFC
    Réponses: 2
    Dernier message: 30/05/2006, 12h42
  4. Réponses: 4
    Dernier message: 23/09/2005, 09h16
  5. [Sybase] Utilisation indexes sur table Proxy
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 20/02/2004, 10h20

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