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 de requete


Sujet :

Langage SQL

  1. #1
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut optimisation de requete
    bonjour tous le monde!

    'oilou, j'ai une requete mega grande, et on m'a demandé de l'upgrader!!!!



    la voici :

    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
    $aBind[":SITE_ID"]=$this->params[0];
    		$aBind[":LANGUE_ID"]=$this->params[1];
    		$sVersion=($this->params[2]?$this->params[2]:"CURRENT");
    		$aBind[":CONTENT_HIERARCHIE_ID"]=$this->params[3];
     
    		$aBind[":DAY"] = date("d/m/Y");
    		$aBind[":CONTENT_TYPE_ID"]=$_CONST["CNT_TYPE_NC_RENDEZ_VOUS"];
     
    		$sSQL="
    		SELECT
    			   cv.CONTENT_ID AS id,
    			   DECODE(cv.CONTENT_TITLE_BO,NULL,cv.CONTENT_TITLE,cv.CONTENT_TITLE_BO) AS lib,
    			   CONTENT_TEXT AS TITRE_LONG,
    			   CONTENT_START_DATE,
    			   CONTENT_END_DATE,
    			   cv.CONTENT_HIERARCHIE_ID,
    			   CONTENT_CODE_OPERATION,
    			   DECODE(TO_DATE(CONTENT_DIFFUSION_DATE,'DD/MM/YY') - TRUNC(SYSDATE), -1, 'Hier', 0, 'Aujourd''hui', 1, 'Demain', CONTENT_DIFFUSION_DATE) as DIFF_DATE,
    			   CONTENT_SUBTITLE as LIEU,
    			   CONTENT_URL as URL,
    			   CONTENT_SUBTITLE_2 as DIFF_HEURE,
    				--TO_DATE(CONTENT_DIFFUSION_DATE||' '||CONTENT_SHORT_TEXT, 'DD/MM/YYYY HH24:MI') as TRI,
    			   mcv.MEDIA_ID AS MEDIA_ID,
    			   MEDIA_PATH
     
    		FROM
    			 CNL_CONTENT c
    			 INNER JOIN CNL_CONTENT_VERSION cv
    				ON (
    				   	c.CONTENT_ID = cv.CONTENT_ID
    				   	AND cv.CONTENT_VERSION = c.CONTENT_".$sVersion."_VERSION
    				   	AND cv.LANGUE_ID= :LANGUE_ID
    				   	AND CONTENT_START_DATE <= TRUNC(SYSDATE)
    				   	AND CONTENT_END_DATE >= TRUNC(SYSDATE)
    				   	AND TO_DATE(cv.CONTENT_DIFFUSION_DATE || cv.CONTENT_SUBTITLE_2, 'DD/MM/YYHH24:MI') >= TRUNC(SYSDATE-(1/24), 'HH24')
    				   	)
     
    			 LEFT JOIN CNL_MEDIA_CONTENT_VERSION mcv
    			 	  ON (mcv.CONTENT_ID=cv.CONTENT_ID
    				  AND mcv.CONTENT_VERSION=cv.CONTENT_VERSION)
     
    			 LEFT JOIN CNL_MEDIA m
    			 	  ON (m.MEDIA_ID=mcv.MEDIA_ID)
     
    			 JOIN CNL_CONTENT_HIERARCHIE ch
    				ON ( ch.CONTENT_HIERARCHIE_ID = cv.CONTENT_HIERARCHIE_ID )
     
    		WHERE
    		    c.SITE_ID= :SITE_ID
    		   	AND c.CONTENT_TYPE_ID = :CONTENT_TYPE_ID
    		   ";
    		if($aBind[":CONTENT_HIERARCHIE_ID"]){
    			$sSQL.="
    				AND (
    					cv.CONTENT_HIERARCHIE_ID in(".$aBind[":CONTENT_HIERARCHIE_ID"].")
    					OR
    					ch.CONTENT_PARENT_HIERARCHIE_ID in(".$aBind[":CONTENT_HIERARCHIE_ID"].")
    				)
    			";
    		}
    		$sSQL.="ORDER BY CONTENT_DIFFUSION_DATE, CONTENT_SUBTITLE_2
    		";

    bon, le coup des bind, c'est simplement de la securisation de variables, donc, rien de bien mechant



    par contre, c'est cette monstrueuse requete que je dois upgrader!!!


    et j'en ai pas la moindre fichtrouille idée de savoir comment faire!


    help please!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 877
    Points : 53 055
    Points
    53 055
    Billets dans le blog
    6
    Par défaut
    Ca veut dire quoi Upgrader ???? Parce que en SQL ce concept est inconnu !

    A +

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Déjà, le DDL des tables pourrait nous aider, les alias de table ne sont pas utilisés systématiquement, du coup on ne sait pas à quelle table appartiennent certaines colonnes.

    Ensuite, optimiser pour quoi? Un problème de performances?
    Si oui, sans la volumétrie des tables et les index existants, il ne sera pas évident de cerner le problème.

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Votre probleme est que la requete possede un trop grand nombre de caracteres ou que ses performances ne sont pas bonnes ?

    Car ce sont 2 choses différentes.
    Si les performances ne sont pas bonnes, il faut regarder attentivement le plan d'execution et regarder les goulots d'étranglement.

    Bon courage

  5. #5
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut
    daccord, merci pour ces conseils, je vais regarder la structure de ma bdd, mais en gros, je voulais savoir si la requete etait normal -grossomodo- ou si le sql pouvait etre amelioré.


    Voyant que rien ne vous derange, ca me rassure!

    bon, vais travailler ca.


    MERCI

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Non, rien de choquant, juste les 4 dernières conditions de jointure de votre premier INNER JOIN qui peuvent à première vue être passé dans le WHERE, mais c'est simplement une histoire de lisibilité. Comme le fait d'utiliser systématiquement vos alias lorsque vous désignez une colonne, qui pourrait aider à la compréhension.

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

Discussions similaires

  1. Optimisation de requete
    Par Scorff dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 11/07/2005, 09h59
  2. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09
  3. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26
  4. Optimisation de requete
    Par cyril dans le forum SQL
    Réponses: 3
    Dernier message: 09/10/2003, 08h57
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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