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 :

optimisation d'une requête


Sujet :

Langage SQL

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut optimisation d'une requête
    Bonjour,

    J'ai une requête sql qui fonctionne très bien et que j'utilise pour mysql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "SELECT maj_etat_civil.id_maj,id_user,maj_num_dos,maj_civilite_id, CONCAT(maj_nom,' ', maj_prenom,' ', maj_prenom_usage) as maj_nom,maj_etat_civil.id_trt, CONCAT(tiers_nom,' ',tiers_adr1,' ',tiers_adr2,' ',tiers_adr3,' ',cp,' ',libelle) as maj_prenom FROM ".$prefixe_table."t_users_dossiers LEFT OUTER JOIN ".$prefixe_table."maj_etat_civil ON t_users_dossiers.id_maj=maj_etat_civil.id_maj LEFT OUTER JOIN ".$prefixe_table."maj_adresses ON t_users_dossiers.id_maj=maj_adresses.id_maj LEFT OUTER JOIN ".$prefixe_table."t_tiers ON t_tiers.id_tiers=maj_adresses.id_tiers LEFT OUTER JOIN ".$prefixe_table."t_ville ON t_ville.ville_id=t_tiers.tiers_ville_id WHERE '".$today."' BETWEEN (gest_date_debut AND gest_date_fin) AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_nom LIKE '%$argument2%' OR '".$today."'>=gest_date_debut AND 0<=gest_date_fin AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_nom LIKE '%$argument2%' OR '".$today."' BETWEEN (gest_date_debut AND gest_date_fin) AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_adr1 LIKE '%$argument2%' OR '".$today."'>=gest_date_debut AND 0<=gest_date_fin AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_adr1 LIKE '%$argument2%' OR '".$today."' BETWEEN (gest_date_debut AND gest_date_fin) AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_adr2 LIKE '%$argument2%' OR '".$today."'>=gest_date_debut AND 0<=gest_date_fin AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_adr2 LIKE '%$argument2%' '".$today."' BETWEEN (gest_date_debut AND gest_date_fin) AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_adr3 LIKE '%$argument2%' OR '".$today."'>=gest_date_debut AND 0<=gest_date_fin AND t_users_dossiers.id_trt BETWEEN 1 AND 4 AND maj_etat_civil.id_trt BETWEEN 1 AND 4 AND tiers_adr3 LIKE '%$argument2%' ORDER BY maj_nom, maj_prenom limit $start,$nb_majeur";

    Mon problème est juste au niveau de la performance. Existe-t-il une syntaxe plus légère de requête au niveau de mes "OR" ?

    Merci d'avance
    __________________

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Merci de faire un minimum d'effort pour mettre ta requête sur plusieurs lignes et l'indenter correctement, elle fait 2km de longueur et elle est donc illisible telle quelle,

    En règle générale, merci de respecter les CONSEILS... à lire AVANT de POSTER (pas de code PHP, etc)

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oh ! Pardon. Je l'ai copier depuis un autre post que j'avais mis sur le forum sur php/mysql. et dans la copie j'ai perdu la présentation. Je n'ai pas fait attention avant de valider.

    Donc mille excuses.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    $req = "SELECT maj_etat_civil.id_maj,id_user,maj_num_dos,maj_civilite_id, 
    CONCAT(maj_nom,' ', maj_prenom,' ', maj_prenom_usage) as maj_nom,maj_etat_civil.id_trt, 
    CONCAT(tiers_nom,' ',tiers_adr1,' ',tiers_adr2,' ',tiers_adr3,' ',cp,' ',libelle) as maj_prenom 
    FROM ".$prefixe_table."t_users_dossiers 
    LEFT OUTER JOIN ".$prefixe_table."maj_etat_civil 
    ON t_users_dossiers.id_maj=maj_etat_civil.id_maj 
    LEFT OUTER JOIN ".$prefixe_table."maj_adresses 
    ON t_users_dossiers.id_maj=maj_adresses.id_maj 
    LEFT OUTER JOIN ".$prefixe_table."t_tiers 
    ON t_tiers.id_tiers=maj_adresses.id_tiers 
    LEFT OUTER JOIN ".$prefixe_table."t_ville 
    ON t_ville.ville_id=t_tiers.tiers_ville_id 
    WHERE '".$today."' 
    BETWEEN (gest_date_debut AND gest_date_fin) 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_nom LIKE '%$argument2%' 
    OR '".$today."'>=gest_date_debut 
    AND 0<=gest_date_fin 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_nom LIKE '%$argument2%' 
    OR '".$today."' 
    BETWEEN (gest_date_debut AND gest_date_fin) 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_adr1 LIKE '%$argument2%' 
    OR '".$today."'>=gest_date_debut 
    AND 0<=gest_date_fin 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_adr1 LIKE '%$argument2%' 
    OR '".$today."' 
    BETWEEN (gest_date_debut AND gest_date_fin) 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_adr2 LIKE '%$argument2%' 
    OR '".$today."'>=gest_date_debut 
    AND 0<=gest_date_fin 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_adr2 LIKE '%$argument2%' 
    OR '".$today."' BETWEEN (gest_date_debut AND gest_date_fin) 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_adr3 LIKE '%$argument2%' 
    OR '".$today."'>=gest_date_debut 
    AND 0<=gest_date_fin 
    AND t_users_dossiers.id_trt 
    BETWEEN 1 AND 4 
    AND maj_etat_civil.id_trt 
    BETWEEN 1 AND 4 
    AND tiers_adr3 LIKE '%$argument2%' 
    ORDER BY maj_nom, maj_prenom limit $start,$nb_majeur";
    C'est évidemment mieux présenté comme ceci.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par lodan
    Oh ! Pardon. Je l'ai copier depuis un autre post que j'avais mis sur le forum sur php/mysql. et dans la copie j'ai perdu la présentation.
    Je crois que le multi-post n'est pas tellement recommandé ici... et je t'ai répondu ce midi http://www.developpez.net/forums/sho...d.php?t=261124

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par Antoun
    Je crois que le multi-post n'est pas tellement recommandé ici... et je t'ai répondu ce midi http://www.developpez.net/forums/sho...d.php?t=261124
    Tout a fait d'accod, mais c'est sur les conseil de Xave (Rédactrice/Modératrice) que je l'ai fait.

    Merci, pour ta réponse que je m'empresse d'aller comprendre et tester.

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

Discussions similaires

  1. Optimisation d'une requête
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/12/2005, 18h21
  2. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00
  3. Optimisation d'une requête patchwork
    Par ARRG dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/09/2005, 15h23
  4. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45
  5. [DB2] Optimisation d'une requête
    Par ahoyeau dans le forum DB2
    Réponses: 7
    Dernier message: 11/03/2005, 17h54

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