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

 SGBD Discussion :

Lenteur mysql et changement de sgbd


Sujet :

SGBD

  1. #1
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut Lenteur mysql et changement de sgbd
    Bonjour, j'ai certaine requête assez lente, il me prenne 15ms par page alors que le contenu mysql est presque vide (seulement 8000 entrées pour 600 000 prévu).
    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reply = mysql_query('SELECT COUNT(id_rss) AS nbr_entry FROM `entry` WHERE id_rss=\''.$nombre.'\'') or die(mysql_error());
    Pour cette requête un comptage approximatif ne me dérange pas.
    Et la 2eme requête lente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reply = mysql_query('SELECT id FROM `entry` ORDER BY `date` DESC LIMIT 0, 10) or die(mysql_error());
    Voila ma structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE IF NOT EXISTS `entry` (
      `id` int(11) NOT NULL auto_increment COMMENT 'unique id',
      `title` text NOT NULL COMMENT 'the title',
      `description` text NOT NULL COMMENT 'the description',
      `link` varchar(128) NOT NULL COMMENT 'the link',
      `id_rss` int(11) NOT NULL COMMENT 'which rss have create this entry',
      `date` int(11) NOT NULL COMMENT 'date',
      `keyword_detected` text NOT NULL,
      `keyword_specified` text NOT NULL,
      `cat` enum('Genérale') NOT NULL default 'Genérale' COMMENT 'The categories',
      PRIMARY KEY  (`id`),
      KEY `link` (`link`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8818 ;
    C'est un dédié, trés performant, optimisé sur mesure par des professionnels de l'infogérance, et qui démontre sur tout les autres script une efficacité inégalé.
    Voyez vous un moyen de l'optimiser? Faudrai t'il que je change de sgdb? Si oui la quel? (Avec peu d'administration svp)
    Merci d'avance.
    Développeur d'Ultracopier

  2. #2
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 058
    Points
    1 058
    Par défaut
    Il faudrait sans doute mettre un index sur date et id_rss.

  3. #3
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut
    Détail moi ce que ca fait et pourquoi c'est tout d'un coup bien plus performant stp.
    Développeur d'Ultracopier

  4. #4
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut
    C'est bien plus performant sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `entry` WHERE id_rss='46' ORDER BY `date` DESC LIMIT 0,10
    Mais pas sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `entry` ORDER BY `date` DESC LIMIT 0,10
    Développeur d'Ultracopier

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    L'index sur la date est-il DESC ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  6. #6
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut
    Meme lenteur sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `entry` LIMIT 0,10
    Développeur d'Ultracopier

  7. #7
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    Un petit explain ne serais pas du luxe

  8. #8
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut
    Serveur: localhost
    Base de données:
    Généré le : Sam 12 Septembre 2009 à 14:00
    Généré par: phpMyAdmin 3.2.0 / MySQL 5.0.70
    requête SQL: EXPLAIN EXTENDED SELECT * FROM `entry` LIMIT 8800,10;
    Enregistrements: 1
    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE entry ALL NULL NULL NULL NULL 8836
    Développeur d'Ultracopier

  9. #9
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 058
    Points
    1 058
    Par défaut
    LIMIT 8800,10; et LIMIT 0, 10 ce n'est pas pareil.

    Chez moi limit 0,10 est optimisé et ne lit que 10 lignes donc c'est rapide. Par contre LIMIT 8800,10 en lira 8810, forcément c'est beaucoup plus lent comme en plus vos lignes sont grosses.

  10. #10
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par Jester Voir le message
    LIMIT 8800,10; et LIMIT 0, 10 ce n'est pas pareil.

    Chez moi limit 0,10 est optimisé et ne lit que 10 lignes donc c'est rapide. Par contre LIMIT 8800,10 en lira 8810, forcément c'est beaucoup plus lent comme en plus vos lignes sont grosses.
    Tu as un explain qui montre cela ?

    Chez moi, LIMIT 10, ou LIMIT 20000,10, c'est strictement la même chose.

    MySQL va lire toutes les lignes retournées par la requêtes (sans LIMIT), une fois toutes les lignes retournées, le LIMIT est appliqué.

    Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM communes LIMIT 10
    MySQL va lire toutes les lignes de ma table (environ 37000) et ensuite seulement, en affiche que 10, masque les autres.
    Ont le voit clairement dans les Explain.



    Et forcément, c'est la même chose si on ajoute ORDER BY.

  11. #11
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 058
    Points
    1 058
    Par défaut
    Les valeurs du explain ne sont que des indications. Mes tests montrent que l'augmentation du temps de la requête est linéaire avec l'offset du limit.

    MySQL version 5.0.67.

  12. #12
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Quels genre de tests faut-il effectuer ?
    Cela m'intéresse, j'aimerai pouvoir le vérifier moi-même.

  13. #13
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 058
    Points
    1 058
    Par défaut
    SELECT * FROM communes LIMIT 10, 1

    puis

    SELECT * FROM communes LIMIT 10000, 1

    mais 30000 ça risque d'être trop petit pour être évaluable.

Discussions similaires

  1. Truc & astuce / lenteur MySql
    Par Tardiff Jean-François dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/05/2009, 17h49
  2. Changement d'SGBD avec Delphi 2007
    Par K-PAX dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/06/2008, 21h02
  3. Réponses: 3
    Dernier message: 19/06/2008, 00h00
  4. Nombre de connexions important et lenteur MySQL
    Par max44410 dans le forum Requêtes
    Réponses: 11
    Dernier message: 27/02/2008, 12h52
  5. Lenteur MySQL sous Vista
    Par TrEiZe85 dans le forum Installation
    Réponses: 4
    Dernier message: 07/05/2007, 11h17

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