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

PHP & Base de données Discussion :

SQL_BIG_SELECTS en haut de page


Sujet :

PHP & Base de données

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut SQL_BIG_SELECTS en haut de page
    Dans quelques fichiers de mon application, certaines requetes sont copieuses (peut-etre mal ficelée)

    Cela se traduit à ce jour sur quelques rares serveurs par un

    The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

    La solution de facilité pour moi est de placer au debut de chacune de mes pages php ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $requete = "SET SQL_BIG_SELECTS=1";
    $result = mysql_query($requete, $conn) or die(mysql_error());
    Si cela resoud le problème, y at-il des contre indications à procéder de la sorte ?
    Merci à tous.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    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 814
    Billets dans le blog
    14
    Par défaut
    Étant donné certaines requêtes complexes que j'ai effectuées et le fait que je n'ai jamais rencontré ce message d'erreur, j'aimerais bien voir une requête qui le provoque. Il y a probablement moyen de l'optimiser.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Par défaut
    Par exemple ce style de requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query_RsInvite = sprintf("
    SELECT DISTINCT gic_ID, nom_classe, nom_matiere, cdt_classe$num_archive.ID_classe,cdt_matiere$num_archive.ID_matiere 
    FROM cdt_agenda$num_archive, cdt_classe$num_archive, cdt_matiere$num_archive 
    WHERE `prof_ID` =%s 
    AND cdt_classe$num_archive.ID_classe = cdt_agenda$num_archive.classe_ID 
    AND cdt_matiere$num_archive.ID_matiere = cdt_agenda$num_archive.matiere_ID 
    ORDER BY gic_ID, cdt_classe$num_archive.nom_classe, cdt_matiere$num_archive.nom_matiere ", $profchoix_RsInvite);
    Cette requete passe bien sur 99,5 % des serveurs

    ou celle-ci pour laquelle l'erreur sera identique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $query_res2 = sprintf("SELECT DISTINCT nom_classe,ID_classe FROM cdt_classe,cdt_emploi_du_temps,cdt_groupe_interclasses,cdt_groupe_interclasses_classe WHERE 
    cdt_emploi_du_temps.classe_ID=0
    AND
    cdt_emploi_du_temps.prof_ID=%s
    AND
    cdt_emploi_du_temps.gic_ID=cdt_groupe_interclasses.ID_gic
    AND
    cdt_groupe_interclasses.ID_gic=cdt_groupe_interclasses_classe.gic_ID
    AND
    cdt_groupe_interclasses_classe.classe_ID=cdt_classe.ID_classe  ORDER BY nom_classe ASC",$_SESSION['ID_prof']);
    Un SET SESSION SQL_BIG_SELECTS=1 peut-il avoir des dommages collatéraux ?

    Merci pour votre aide

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Par défaut
    En général si sur le serveur tu as des limitation de la sorte c'est qu'il y a des raisons

    Ou des soucis de configuration.

    Sur le serveur qui te sort l'erreur fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @@SQL_MAX_JOIN_SIZE;
    pour voir la valeur qui est mise.

    Si la valeur est elevée mais que tu as quand même l'erreur qui se produit alors c'est que tes requêtes renvoient bcp trop de ligne et que tu peut les optimiser.

    Si la valeur est trop basse et que tu ne peut optimiser tes requêtes, alors tu n'aura pas trop le choix, mais sache qu'en général cela va devoir créer des tables temporaires sur disques pour tes jointures avec toutes les lenteurs qui vont en découler.

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    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 814
    Billets dans le blog
    14
    Par défaut
    Dans la première requête, il n'y a que deux jointures, ce n'est vraiment pas beaucoup !
    Les colonnes figurant dans les conditions de jointures sont-elles indexées ?

    La seconde requête contient trois jointures, ce qui n'est guère plus ! Donc même question.

    De plus...
    1) Les jointures s'écrivent depuis 1992 avec l'opérateur JOIN.

    2) L'utilisation d'alias rend les requêtes beaucoup plus agréables à lire.

    Vos requêtes récrites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT DISTINCT gic_ID, nom_classe, nom_matiere, c.ID_classe, m.ID_matiere 
    FROM cdt_agenda$num_archive a
    INNER JOIN cdt_classe$num_archive c ON c.ID_classe = a.classe_ID
    INNER JOIN cdt_matiere$num_archive m ON m.ID_matiere = a.matiere_ID
    WHERE prof_ID = %s 
    ORDER BY gic_ID, c.nom_classe, m.nom_matiere
     
    SELECT DISTINCT nom_classe, ID_classe 
    FROM cdt_classe c
    INNER JOIN cdt_groupe_interclasses_classe ic ON ic.classe_ID = c.ID_classe
        INNER JOIN cdt_groupe_interclasses i ON i.ID_gic = ic.gic_ID
            INNER JOIN cdt_emploi_du_temps t ON t.gic_ID = i.ID_gic
    WHERE t.classe_ID = 0
        AND t.prof_ID = %s
    ORDER BY nom_classe ASC
    il y manque encore des alias devant des noms de colonnes mais je ne peux pas deviner à quelles tables appartiennent ces colonnes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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. [Référencement] footer optimisé en haut de page
    Par the_dydy dans le forum Référencement
    Réponses: 1
    Dernier message: 25/04/2007, 13h32
  2. [XHTML] haut de page dans un iframe
    Par bourvil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 19
    Dernier message: 05/07/2006, 09h38
  3. Aligner un tableau en haut de page
    Par leloup84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/03/2006, 10h11
  4. caractères étranges an haut de page sous Ffx
    Par javatwister dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 27/08/2005, 01h49
  5. # et retour en haut de page
    Par littleqi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/12/2004, 16h08

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