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 :

Bouclage infini sur requête simple


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut Bouclage infini sur requête simple
    Bonjour,

    Lorsque je refais la simple requête suivante PHPMYADMIN m'affiche les résultats escomptés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT email, listid
    FROM `jos_acymailing_subscriber`
    LEFT JOIN jos_acymailing_listsub
    USING ( subid )
    WHERE listid =16
    Mais lorsque je fais cette requête pour détecter les subscriber qui n'ont pas été affectés à aucune liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT email, listid
    FROM `jos_acymailing_subscriber`
    LEFT JOIN jos_acymailing_listsub
    USING ( subid )
    WHERE listid IS NULL
    phpmyadmin boucle indéfiniment. Aucun lien de la page PHPMYADMIN ne fonctionne même si j'arrête la requête dans FIREFOX. Mais le serveur mysql continue à fonctionner correctement car les sites continuent à répondre. un restart MYSQL débloque PHPMYADMIN.
    Je ne vois rien dans les logs. (Comment générer systématiquement une erreur pour être sur qu'ils fonctionnent ?)
    Je ne vois pas de saturation des partitions du serveur qui pourrait expliquer ce bouclage

    Merci pour vos idées

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    D'après le préfixe de vos noms de tables, c'est du Joomla ?
    J'ose espérer que la colonne subid est indexée ? Vu que les modèles de données des CMS sont plutôt pourris, on ne sait jamais.
    Sinon je ne vois pas pourquoi la seconde requête serait plus longue que la premiière.

    À tout hasard, vous pouvez aussi essayer la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT s.email
    FROM jos_acymailing_subscriber s
    WHERE NOT EXISTS (
    	SELECT *
    	FROM jos_acymailing_listsub l 
    	WHERE l.subid = s.subid
    )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut problème plus profond
    Merci pour votre réponse. C'est du Joomla en effet et subid est l'index de subscribers, mais listsub concatene subid (cardinalité 5) et listid (cardinalité 312664) comme index.
    J'avais fait ces requêtes avec des alias sans plus de résultat.

    J'ai essayé votre requête. Même résultat. Le serveur se met à boucler, le process mysql utilisant 101% des resources.

    J'ai tenté une réparation et optimisation des tables concernées qui n'a rien donné non plus.

    J'ai fait ces requêtes sur un autre serveur, local, même chose.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    listsub concatene subid (cardinalité 5) et listid (cardinalité 312664) comme index.
    Si cela veut dire que l'index est basé sur le couple de colonnes {subid, listid} dans cet ordre, alors il est très mal foutu !
    De plus, cela veut dire que listid n'est pas indexé individuellement et que les recherches faites sur cette colonne n'utiliseront pas l'index basé sur le couple.

    Il faut inverser les colonnes de l'index et ça devrait aller beaucoup plus vite.

    Quand je disais que les BDD des CMS sont mal foutues !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Pb de perfomance sur requête simple
    Par FMJ dans le forum Développement
    Réponses: 28
    Dernier message: 02/09/2014, 11h54
  2. Performance select distinct sur requête simple
    Par lapin_hobbit dans le forum SQL
    Réponses: 4
    Dernier message: 05/12/2011, 12h38
  3. [MySQL] Requête simple avec un Where sur un champ utf8_bin
    Par Romanops dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/08/2011, 17h35
  4. Problème sur une requête simple dans une table simple
    Par Muso tensei dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 26/04/2009, 13h28
  5. Aide sur une requête simple
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/01/2008, 20h21

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