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

Langage SQL Discussion :

Lenteur grosse requête SELECT


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Lenteur grosse requête SELECT
    Bonjour,

    J'ai une requête select extremement lente de l'ordre de 20 secondes pour quelques millions d'enregistrements, voici un extrait du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
       $premiereImageAafficher = ($page - 1) * $nombreDimageParPage;
       $query = "select image from total WHERE filer = '5' ORDER BY id LIMIT $premiereImageAafficher , $nombreDimageParPage";
    	$result = mysql_query($query) or die("La requête \"$query\" n'a pas pu s'exécuter !");
    		while ($val = mysql_fetch_array($result)) {
    			$imgf=$val['image'];
    			$imgf2 = str_replace(" ","+",$imgf);
    				if (!($i++%$nb_images_ligne))  echo "<tr>\n";
    				echo "\n";
    ?>
    Comment puis-je optimiser cette requête select / boucle ? j'ai déjà un index sur "image"

    Cordialement

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Y a t-il un index sur 'filer' ?
    Quel est l'intérêt de faire un 'ORDER BY id' alors qu'on ne sélectionne pas cette colonne ?
    Quel est le type de la colonne 'image' ? J'espère que ce n'est pas un blob parce qu'avec plusieurs millions de lignes, pas étonnant que ça prenne du temps à récupérer !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Oui il y a un index sur 'filer', je viens de retirer le order by et c'est déjà beaucoup plus rapide, concernant la colonne 'image' c'est de type varchar.

    Que puis-je faire d'autre ?

    Merci de tes réponses

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Quel temps de réponse maintenant ?
    Combien de lignes dans la table ?
    Caractéristiques du serveur ?

    Voir cet article pour des pistes de réponse sur la raison de la lenteur relative de la requête.

    Mais avec plusieurs millions de lignes, ne pas s'attendre à des miracles si le serveur n'est pas à la hauteur.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Je dirais entre 4 et 5 secondes pour le temps de réponse maintenant.

    Et plus exactement 1 616 260 lignes

    Le serveur est:

    Intel Core2Duo
    2x 2.66+ GHz
    4 Mo L2 - FSB 1066 MHz
    4 Go DDR2

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    4 à 5 secondes pour 1,6 millions de lignes, je ne trouve pas ça choquant.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Ok, je vais m'en contenter.

    Merci à toi et bonne journée

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

Discussions similaires

  1. Résultat commençant par un chiffre avec requête SELECT
    Par nicolas.pissard dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2010, 13h31
  2. Optimisation d'une requête SELECT sur une grosse table
    Par eracius dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/05/2008, 14h51
  3. SQL Server 7.0 - Requête Select
    Par sangokus dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/03/2004, 10h32
  4. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

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