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

Outils MySQL Discussion :

Performances de MySQL


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut Performances de MySQL
    Bonjour,

    J'ai besoin de conseil concernant les performances de mysql.

    En effet, je suis en train de dev un site pour la boite ou je bosse et je viens de m'appercevoir que j'allais peut-être avoir quelques problèmes au niveau des perf max de mysql.

    En 2 mots voici ce que je réalise:

    Je travail pour une boite qui est implanté sur toute la France.
    Chaque région possède ca propre agence et chaque agence est donc responsable de toutes les communes de ca région.

    Au départ, le projet intranet que j'ai dev concernant uniquement mon agence (en gros 1000 communes) mais aujourd'hui on me demande de mettre en place l'application pour toute les agences de France (soit plus de 36 000 communes).

    Mon inquiétude est de savoir si dans un premier temps mysql est capable de gérer une table contenant 36000 communes.

    Ensuite, chaque agence qui utilisera l'application ne verra que les communes qui les concerne. Ma seconde question est donc de savoir si le fait de requêter dans une table contenant 36 000 communes et d'en sortir entre 700 et 1000 ne risque pas de faire ramer totalement l'application intranet?

    Je ne connais pas bien les limite de mysql associé avec php d'ou ces questions avant de me lancer tête baissée en créant une seule et unique table reprenant toute mes communes.

    Autrement, j'ai toujours la solution de créer une table par agence (c'est moins propre mais si je n'ai pas le choix....).

    Qu'en pensez vous?

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Salut,

    Première chose : il est difficile de te répondre si MySQL peut gérer "une table contenant 36 000" communes. Il serait mieux de parler en terme d'espace disque occupé par cette fameuse table.

    Mais je doute que tu aies beaucoup de problèmes de performances, surtout si la plupart des requêtes exécutées peuvent tirer profit d'index.

    En ce qui concerne le pourcentage de données accédées par rapport aux données totales, tu soulèves un problème intéressant. En effet, si chaque agence avait sa propre table, les performances seraient bien meilleures.

    Comme tu le dis, ce n'est pas très propre... Et c'est là que le principe du partitionnement (horizontal) intervient. Une seule table est vue dans MySQL mais sur le disque dur, la table est répartie en plusieurs fichiers plus petits. Et MySQL ne lit que les fichiers qu'il a besoin.

    Une gestion correcte du partitionnement ne sera disponible qu'à partir de MySQL 5.1 (et encore, je pense que ça ne sera pas vraiment au point ). Il est néanmoins possible d'utiliser le moteur de stockage MERGE pour les versions inférieures (au moins la 5.0).

    Si mon explication n'est pas très claire à propos du partitionnement, je t'invite à lire l'introduction de l'article que j'ai redigé. voire même l'intégralité pour préparer le futur de ton application si un jour tu migreras vers MySQL 5.1

  3. #3
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Bien... 36000 c'est petit . Avec les machines actuelles ça a de bonnes chances de tenir en RAM (suivant le contenu) ce qui limite grandement les problèmes de disques, et si les requêtes sont proprement indéxées ça va aller.

    C'est plutôt la quantité de requêtes qui seront effectuées et la bande passante nécessaire dont il faudra probablement s'occuper. Qu'elle est l'affluence attendue ? Si c'est un client par région, à moins que le site soit très lourd, ça devrait être gérable (louchomètre inside).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    Avant tout merci pour vos réponse.

    C'est pas vraiment la table en elle même qui m'inquiète car finalement, il y a peu de données dans celle ci:

    un champ "codePostal"
    un champ "commune"
    un champ "idAgence"

    C'est plutôt le nombre d'entrées (36700) et par conséquent les requêtes qui m'inquiète (en sachant que j'ai pas mal de tri du même type sur cet outil étant donné que chaque agence doit avoir ces propres spécificités).

    Par contre, qu'est ce que vous entendez par:
    "surtout si la plupart des requêtes exécutées peuvent tirer profit d'index."
    "requêtes sont proprement indéxées ça va aller."

    ??

    Encore merci

  5. #5
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    En supposant que la plupart de tes requêtes auront une condition comme "WHERE idAgence = x", si tu as défini un index pour cette colonne idAgence, MySQL sera capable de récupérer rapidement les résultats qui t'intéressent. Ca lui évite de parcourir les 36700 lignes de la table.

    Mais bon, si tu n'as que ça comme données à stocker dans la table, ça va à peine dépasser le méga octet. Tu n'as pas à t'en faire pour MySQL pour si peu Et le partitionnement ne sera pas intéressant non plus.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    si tu as défini un index
    Je ne connaissais pas le fait d'indexer une colonne dans une table.. Je vais faire quelques recherches à ce sujet.

    Merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par toffff
    Je ne connaissais pas le fait d'indexer une colonne dans une table.. Je vais faire quelques recherches à ce sujet.

    Merci
    Comme tous les sgbd, indexer une colonne augmente les performances d'un facteur tel que faire sans c'est une erreur
    Si en plus l'index est une clé unique (ce qui devrait être le cas pour les communes) alors c'est encore mieux.

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

Discussions similaires

  1. performances de MySQL par rapport à HyperFile C/S
    Par foulla dans le forum Administration
    Réponses: 3
    Dernier message: 12/06/2008, 12h16
  2. Performance maximal MySQL
    Par LhIaScZkTer dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/02/2007, 19h19
  3. Performances SimpleXML / MySQL
    Par Benji76 dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2007, 22h29
  4. Performance de MySQL
    Par dragonspyro93 dans le forum Débuter
    Réponses: 8
    Dernier message: 05/06/2006, 20h50
  5. Performances de MySQL pour de grandes bases
    Par arthix dans le forum Outils
    Réponses: 6
    Dernier message: 06/03/2006, 14h46

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