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 :

"optimiser" une reqûete UNION ALL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut "optimiser" une reqûete UNION ALL
    Bonjour,
    Je viens d'hériter d'une requête que je dois "optimiser" enfin plutôt voire ce qu'on peut faire avec.

    La requête se décompose en deux parties, un peu comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select champ1, champ2, champ3, champ4
    from table1, table2, table3
    where blabla
    union all
    select champ1, 0 as champ2, champ3, 1 as champ4
    from table1, table2
    where blabla
    Donc vous l'aurez compris l'intérêt (pour moi) du union all est que dans le deuxième select on travaille avec une table en moins et le champ de cette table est remplacé par une constante, parce qu'on en a quand même besoin dans le retour.

    Donc a votre avis est ce que je pourrai faire sauter le union all et un peu raccourcir cette requête? Parce que là ça dépasse un peu mes connaissances de sql.

    Merci de votre aide.

  2. #2
    Membre émérite
    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
    Par défaut
    Bonjour,

    Sans la vraie requête et une description de ce qu'elle est censée fournir comme infos, il sera difficile de vous aider.
    On parle d'optimisation, donc pourquoi pas la structure et la volumétrie de vos tables, les index, etc...
    Précisez au passage votre SGBD, ça peut aussi servir.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    1 repondez à spinah en respectant les règles de ce forum
    http://www.developpez.net/forums/a69...gage-sql-lire/
    2 transformez le UNION ALL en UNION ci cela est sémantiquement valable

    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/ * * * * *

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Bonjour,

    Sans la vraie requête et une description de ce qu'elle est censée fournir comme infos, il sera difficile de vous aider.
    On parle d'optimisation, donc pourquoi pas la structure et la volumétrie de vos tables, les index, etc...
    Précisez au passage votre SGBD, ça peut aussi servir.
    Pour la description de ce que doit faire la requête, je suis un peu dans le flou, on m'a refilé le bébé et débrouilles toi...
    Sinon on est entrain de migrer notre système d'une base DB2 à une base Oracle.
    Je n'ai accès qu'à la dev et une sorte de pré-prod... donc je ne pourrai pas me prononcé sur les index en revanche au niveau de la volumétrie on doit se situer dans les 100.000 lignes.

    Je vais essayer de vous copier la requête en question.
    Merci pour votre aide.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Voila la fameuse requête

    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
     
    SELECT T3.LIBELLE, T1.NFACTURE AS NUMERO, T2.DATE_PAIEMENT, T1.DATE_DEBUT, T1.DATE_FIN, T2.PUBLIE, T3.TYPE_ABO
    	FROM TABLE1 T1, TABLE2 T2, TABLE3 T3, TABLE4 T4
    		WHERE T1.REFI=T3.REFI 
    		AND T1.NFACTURE=T2.NFACTURE 
    		AND T1.APPLICATION='APPLI' 
    		AND T3.TYPE_ABO=1 
    		AND T2.STATUS_PAIEMENT=0 
    		AND (T4.ID=502 AND T1.USERID=T4.USERID)
    UNION ALL
    SELECT T3.LIBELLE, 0 AS NUMERO, T1.DATE_DEBUT AS DATE_PAIEMENT, T1.DATE_DEBUT, T1.DATE_FIN, 1 AS PUBLIE, T3.TYPE_ABO
    	FROM TABLE1 T1, TABLE3 T3, TABLE4 T4
    		WHERE T1.REFI=T3.REFI 
    		AND T1.APPLICATION='APPLI' 
    		AND (T3.TYPE_ABO=2 OR T3.TYPE_ABO=5) 
    		AND (T4.ID=502 AND T1.USERID=T4.USERID)

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Optimiser sans savoir quels sont les index et donc ne pas pouvoir en rajouter ne sert strictement à rien. En effet on optimise pas (ou rarement) une requête. On optimise la structure physique des données pour obtenir de meilleures performance sur des requêtes.

    Seule amélioration possible, en supposant qu'il n'y a pas de facture 0 (T1.NFACTURE) : supprimer le ALL de l'UNION.

    Voir cours d'optimisation :
    http://sqlpro.developpez.com/cours/optimiser/
    http://sqlpro.developpez.com/cours/quoi-indexer/
    http://sqlpro.developpez.com/optimisation/

    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/ * * * * *

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    En fait c'est pas vraiment de l'optimisation (d'où mes guillemets) mais plutôt une amélioration, en fait je crois que cette requête à fait peur et qu'on nous à demandé de la retravailler.

    En tout cas merci pour tes liens, je vais quand même regarder ce que ça donne.
    Et j'ai enlevé aussi le ALL et pour l'instant ça me donne la même chose.

    Merci

Discussions similaires

  1. Optimisation d'une requête avec UNION ALL
    Par jgfa9 dans le forum Requêtes
    Réponses: 11
    Dernier message: 01/08/2012, 21h53
  2. Calcul de % sur une requête UNION ALL
    Par lodan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2007, 14h20

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