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

MS SQL Server Discussion :

Question d'optimisation de requête !


Sujet :

MS SQL Server

  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut Question d'optimisation de requête !
    Bonjour à tous,

    J'ai souvent cette interrogation quand j'écris une requête un petit peu complexe, quel est la meilleure façon d'écrire ma requête des if's || des unions ? Et il y a un cas que est un peu récurent et pour lequel j'aimerai avoir votre avis :

    Je dois récupérer des données mais il n y a pas un cas de figure mais plusieurs, alors qu'est ce qui est le mieux faire des if (sur des champs récupérer dans un table temp) et des jointures parfois un peu tordu ou encore délimiter les cas avec des UNION ?

    Je vais prendre mon cas actuel comme exemple :

    Je veux récupérer un produit et l'arborescence des catégories qui le contient (au maximum on a une rubrique > Sous-rubrique > Sous-Sous-Rubrique au minimum Rubrique)

    Donc quel est le mieux à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(Sous-rubrique is null  and Sous-Sous-Rubrique is null)
    Begin
      SELECT p1.Lbl as LBL-Rub, p1.Url as URL-Rub, p2.Lbl as LBL-Prod, p2.Url as URL-Prod
      FROM Prod pr, Rub r, Page as p1, Page as p2
      WHERE pr.Fk_Rub = r.Pk_Rub AND p2.Fk_Rub = r.Pk_Rub AND pr.PK_Pro = p1.Fk_Pro AND pr.Pk_Prod = @ProdId 
     
    if(Sous-rubrique is null  and Sous-Sous-Rubrique is not null) ...
    Et encore ça c'est le cas le plus simple (en plus j'ai un peu simplifié puisque je dois faire des vérification métier ...).

    Ou faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT p1.Lbl as LBL-Rub, p1.Url as URL-Rub
    FROM  Prod pr, Page as p1
    WHERE pr.PK_Pro = p1.Fk_Pro AND pr.Pk_Prod = @ProdId 
     
    UNION
     
    SELECT p2.Lbl as LBL-Prod, p2.Url as URL-Prod
    FROM Rub r, Page as p2, Prod as pr
    WHERE p2.Fk_Rub = r.Pk_Rub AND pr.Pk_Prod = @ProdId AND pr.Fk_Rub = r.Pk_Rub
    ect ...

    Quand dites vous ?

    J'espère que j'ai été claire, en vous remerciant.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  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
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Une seule requête sera mieux que deux.
    Mais faites plutôt de vrais jointures avec des JOIN !
    Sachez que la syntaxe avec des jointures dans le where à 20 ans de retard ! Êtes vous déjà proche de la retraite qu'il vous faille utiliser une chose aussi obsolète ???
    C'est cela l'optimisation !
    Et voici pourquoi c'est préférable : http://blog.developpez.com/sqlpro?ti..._dans_le_from_

    Après tout dépend des index présents !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Oui je suis d'accord avec vous et avec votre billet (que j'ai par ailleurs déjà lu), néanmoins j'ai du mal à écrire le Join naturellement (formation pas lointaine et pourtant on me l'a apprit de la mauvaise manière ...), mais je me soigne (je m'aide un peu avec le requêteur de SQL Server).

    En tout cas merci pour vos conseils.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

Discussions similaires

  1. question sur les vues et l'optimisation de requêtes
    Par zaboug dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/03/2009, 16h28
  2. Questions d'optimisation de requêtes
    Par beberd dans le forum Requêtes
    Réponses: 30
    Dernier message: 18/01/2007, 15h51
  3. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  4. :?: question d'optimisation!
    Par Stopher dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2004, 17h15
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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