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

Requêtes MySQL Discussion :

Optimisation MySQL par division dans plusieurs tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Par défaut Optimisation MySQL par division dans plusieurs tables
    Bonjour à toutes et à tous,

    Je viens tout juste de m'inscrire sur les forums de Developpez.com, site sur lequel je consulte régulièrement les nombreux articles

    Mon premier message concernera donc l'optimisation d'une table MySQL (autrement que par les INDEX ou autres méthodes traditionnelles).


    Contexte : Pour les sites ayant de très grosses bases de données de membres (par exemple 1,000,000 de membres actifs), il parait évident de diviser ces membres en plusieurs tables (ou bases).

    Et c'est là que ma question intervient, pour moi, il y a deux solutions possibles :

    • Créer, de manière automatique ou manuelle, plusieurs tables membres_1, membres_2, membres_3 dans lesquelles seraient répartis de manière équilibrée tous les membres.
    • Créer plusieurs bases de données (base_1, base_2, base_3, ...) où chaque base contiendrait une table membres. Chaque base accueillant un nombre équilibré de membres.


    Ces solutions se valent elles ou y en a t-il une mieux que l'autre ?

    Pour faire simple, vaut il mieux une simple division des membres en plusieurs tables ou alors carrément une division en plusieurs bases ?


    Je précise que j'utilise MySQL 5 sur un serveur dédié (je n'ai donc pas de limitation de taille par base).

    Pouvez vous me donnez votre propre avis sur la question ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Plusieurs bases de données ou plusieurs tables, je ne vois pas la différence en terme de charge système (pas comme avec Oracle) mais il parait évident qu'il faut être dans la même base pour pouvoir faire des requêtes UNION sur les différentes tables.

    Je suis curieux de voir si les performances seront meilleures car je miserais sans hésiter pour l'efficacité maximale avec une seule table puisque le parcours de l'index ne devrait pas être aussi sensible que cela. Avec plusieurs tables il faudra bien orienter entre les différentes tables...

    Par contre, la taille du cache de MySQL est déterminante pour la rapidité : ça doit être réglable...

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Il ne s'agit pas de "division" mais de partitionnement. Je te conseille la lecture de l'article de Jonathan Krier à ce sujet http://krierjon.developpez.com/mysql/partitionnement.

    Quant à la séparation en plusieurs bases, ça me semble complètement absurde.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Par défaut
    Merci de vos réponses. Ca suit dans un sens ce que je pensais

    La partionnement par bases (pour reprendre alors la bonne expression) ne serait alors nécessaire que dans le cas où l'on aurait besoin de plusieurs serveurs pour héberger le contenu MySQL (et si l'on ne souhaite pas utiliser un cluster).

    Je vais de ce pas lire l'article que tu m'as donné.

    Merci

  5. #5
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Le partitionnement de table est fait pour que le SGBD n'ait pas à parcourir toute la table alors que la requête ne porte que sur un sous-ensemble.J'aime bien l'exemple où l'on partitionne selon le pays : rien ne sert de parcourir les enregistrements liés au Japon quand on veut faire des statistiques sur le France.

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

Discussions similaires

  1. insertion de data dans plusieurs tables jsp/mysql
    Par amola1992 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 31/07/2014, 14h46
  2. Fractionner un excel dans plusieurs tables Mysql
    Par solky dans le forum Développement de jobs
    Réponses: 16
    Dernier message: 03/10/2012, 12h14
  3. [MySQL] Requete MySQL dans plusieurs tables
    Par Luverger dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 23/08/2007, 17h20
  4. Réponses: 6
    Dernier message: 15/04/2004, 11h04
  5. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52

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