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 : une ou deux requetes ?


Sujet :

Requêtes MySQL

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 204
    Par défaut Optimisation : une ou deux requetes ?
    Bonjour,

    Je me pose une question assez importante.
    Mon serveur est surchargé aux heures de pointes.

    La plupart de mes requêtes comportent des jointures (LEFT JOIN, INNER JOIN...).
    Lors d'un problème sur une table, ces requetes ne retournaient plus aucun résultat et la charge du serveur se trouvait très allégée. Alors je me suis dis qu'il vallait ptet mieux deux requètes "simples" (SELECT champ FROM table WHERE id = '1111') qu'une requete avec jointure où les deux tables ont beaucoup d'enregistrements.

    A votre avis ? Avez-vous déjà remarqué cela ?

    Merci.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Donne-nous ta requête et la volumétrie de tes tables, stp.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 52
    Par défaut
    De manière générale, je dirais qu'il vaut mieux une requete que 2 et ainsi donner le travail au moteur de Base de donnée.

    Maintenant, il se peux qu'il manque quelque chose ? peut-être des indexes ?
    Une modification de la configuration du moteur de Base de donnée ?

    filouxera

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 204
    Par défaut
    Bon j'ai effectué quelques tests mais rien de concluant.

    Au niveau temps d'éxécution, une seule requète semble plus rapide.
    Mais au niveau occupation en mémoire, j'ai l'impression que c'est l'inverse.

    Mes tables sont très simples, du style :
    table 1 : (format fixe)
    id <= clé primaire
    champ1
    champ2
    ...etc

    table 2 : (format dynamique à cause de champs varchar)
    id <= clé primaire
    champ1
    champ2
    ...etc

    Il y a le même nombre d'enregistrements dans les deux tables. J'ai créé deux tables afin de rendre la table 1 qui est la plus importante avec des champs fixes et ainsi la table 2 avec quelques champs varchar.

    La requete est basique :
    SELECT table1.champ1,table2.champ1 FROM table1
    INNER JOIN table2 ON table2.id = table1.id
    WHERE table1.id = '1'

    Pensez-vous que rassembler les deux tables et donc rendre la table "dynamique" et plus lourde est avantageux ?

  5. #5
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    D'après moi ça dépend de la fréquence d'utilisation de chaque table. Si la majorité des requêtes portent sur les deux et impliquent donc une jointure, je ne vois pas l'intérêt d'une séparation...

    L'avis d'un expert de chez MySQL AB sur le sujet :

    No, generally you won't see a *huge* performance difference between the two, but there are times when it makes sense to split a large variable-row-length table into one fixed-length table and one or more variable-length tables. There is a small performance gain from using fixed-length records (in MyISAM) over variable-length records because the algorithm for retrieving a fixed-size record is slightly easier than the variable-length records...but there are better reasons to consider splitting a large table into smaller tables....

    Namely, if you have a situation where you have certain fields which are queried *often* and other fields which are *not* queried often, it can makes sense to split the oft-queried fields into its own table (commonly called a "master" table) and the other fields into a separate table (sometimes called a "detail" or "extra" table).

    The fewer the fields in the master table (and the fewer the number of bytes used per field), the faster searches will be, as more records will fit into the various buffers, enabling more records to be searched in the same amount of memory. This strategy is even more important in InnoDB, where the fixed page-size of the clustered data page makes a bigger difference than the page-less ISAM format. In the InnoDB structure, the more records you can cram into a single 16KB data page, the faster all your queries will run, because InnoDB loads data one page at a time. If queries are repeatedly run against only a small subset of a table's fields, it can make a huge performance difference by separating off these fields from the others, because it a) enables more records to fit on the single data page and b) can allow for *multiple clustering keys*, which can be very handy in certain situations, particularly when you want the advantages of quick range-query scans and also sppedy single key lookups, but on different fields...

    Anyway, I'm babbling a bit. Sorry. To return to your question, changing the data type from VARCHAR() to CHAR() can make a small difference in MyISAM tables (not really in InnoDB, which doesn't distinguish between the two), but this difference is not a huge one (IMHO) compared to the performance advantages you get from separating off frequently used fields from infrequently used fields...
    http://forums.mysql.com/read.php?24,45124,45160#msg-45160

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 14/04/2006, 15h34
  2. [9i][Optimisation] Optimiser une requete
    Par nuke_y dans le forum Oracle
    Réponses: 53
    Dernier message: 27/02/2006, 11h34
  3. Experts Mysql : Optimiser une requete sur codes postaux
    Par El Riiico dans le forum Requêtes
    Réponses: 6
    Dernier message: 20/01/2006, 18h00
  4. Aide pour optimiser une requete
    Par Akanath dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/09/2005, 11h05
  5. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26

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