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

Développement SQL Server Discussion :

Requete UNION lente


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut Requete UNION lente
    Bonjour,

    J'ai deux requète qui me renvoi la même liste de champ
    Exécuté indépendamment, la première s'éxecute en 1.5 seconde (11435 ligne), et la deuxième en 0,4 secondes (3447 lignes).

    Quand je fait une requète avec un union sur les deux requètes, celle-ci ne se fini jamais (du moins, je l'ai arrêté au bout de 5 minutes)

    Je ne comprend pas ce qui pourrait expliquer ce comportement...

    LA requete:
    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
     
    select tab,vue.id,'scc|' + rtrim(ltrim(str(coalesce(id_structures_contact_communication,0)))) as cle,
    vue.[id_utilisateur],coalesce([id_suivi],0) as id_suivi,vue.[dcr],
    coalesce([id_champ_valeur_adresse],0) as id_champ_valeur_adresse,[ville],[cp],[region],[pays],[adresse_long],[adresse_court],
    [email],[emadir],[telephone],[teldir],
    [mobile],[mobdir],[site],[sitedir],vue.[libelle],[isole],[fonction],ext_photo_str,ext_photo_con,id_str,id_con,
    [id_structures_contact_communication],[adresse],[libelle_structure] as groupdate,1 as ordtri,0 as nbregroupe 
    from (select t1.*,t2.libelle_structure from 
    (select * from Fnc_structures_contact_communication(58985,0,12) where id_communication=58985) as t1 
    INNER JOIN 
    (select * from fnc_strconcom_strcon(58985)) as t2 ON 
    coalesce(t1.id_structures_contact_communication,0)=coalesce(t2.id_structures_contact_communication,1)) as vue 
    UNION 
    select '' as tab,0 as id,'grp|' + rtrim(ltrim(str(coalesce(id_structure,0)))) as cle,0 as id_utilisateur,0 as id_suivi,null as dcr,
    0 as id_champ_valeur_adresse,
    null as ville,null as cp,null as region,null as pays,null as adresse_long,null as adresse_court,null as email,0 as emadir,null as telephone,
    0 as teldir,null as mobile,0 as mobdir,null as [site],0 as sitedir,[libelle_structure] as libelle,0 as isole,null as fonction,
    null as ext_photo_str,null as ext_photo_con,0 as id_str,0 as id_con,0 as id_structures_contact_communication,'' as adresse,
    [libelle_structure] as groupdate,0 as ordtri,count(*) as nbregroupe  
    from fnc_strconcom_strcon(58985) group by id_structure,libelle_structure
    Auriez vous des pistes car la je sèche...
    J'ai essayé de rajouté des coalesce un peut partout mais rien n'y fait...
    C'est la première fois que je suis confronté à ce genre de curiosité...

    Merci pour votre aide
    Olysmar

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 125
    Points : 38 506
    Points
    38 506
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ca se comprend comment cette syntaxe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...from (select * from Fnc_structures_contact_communication(58985,0,12)
    Sinon, avez vous besoin de toutes les colonnes de vos tables ? quand vous faites un select from (..select * from (select*)) vous créez des sous-ensembles très lourds et probablement inutiles.

    Par ailleurs, une requete formatée serait bien plus facile à lire, là c'est carrément indigeste !

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    MErci pour votre retour...
    Je viens de trouver le problème (la nuit porte conseil)...
    En fait, en faisant un coalesce sur un id dans une de mes fonctions, cela a résolu le problème

    Merci pour votre retour
    Olysmar

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 125
    Points : 38 506
    Points
    38 506
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Ce serait intéressant que vous postiez la correction (au moins l'extrait avant et après)

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    il s'agit a priori de fonctions tables.
    reste à voir leur contenu...

    Il est déjà possible de faire un UNION ALL à la place du UNION, car a priori il n'y a pas besoin de dédoublonner (à vérifier).

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est même certain avec la constante texte concaténée à une conversion de nombre.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut
    Difficile pour moi de poster la solution car le problème était dans une des fonctions
    j'ai tout de même préciser que c'est en faisant un coalesce sur un id qui résoud le problème
    Mais je ne sais pas trop pourquoi
    Merci pour votre aide

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 125
    Points : 38 506
    Points
    38 506
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par olysmar2 Voir le message
    j'ai tout de même préciser que c'est en faisant un coalesce sur un id qui résoud le problème
    Peut être un test de NULL remplacé par un COALESCE, ce qui expliquerait

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

Discussions similaires

  1. [Access] Requete union
    Par kissmytoe dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/02/2006, 10h29
  2. probleme de requete (union)
    Par Le Rebel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2006, 15h40
  3. Perte de données avec requete UNION
    Par askan dans le forum Access
    Réponses: 3
    Dernier message: 02/02/2006, 15h49
  4. [FB 1.5.2] Requetes tres lentes via VPN
    Par gudul dans le forum Connexion aux bases de données
    Réponses: 8
    Dernier message: 05/01/2006, 18h52
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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