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 :

Jointure entre deux tables via des colonnes XML [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    NONE
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NONE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Jointure entre deux tables via des colonnes XML
    Bonjour,

    J'ai deux tables contenant chacune une colonne XLM typé sur lesquelles j'ai posé des indexes XML primaires et secondaires (path et value).

    J'arrive à faire une jointure entre les deux tables avec la requete ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
      FROM donnees_complementaires t1
               INNER JOIN donnees_de_bases t2
                               ON t1.xml.value('(/DONNEES/MAGASIN')[]','varchar(100)') = t2.xml.value('(/ENTITE/NOM')[1],'varchar(100)')
                                    AND t1.xml.value('(/DONNEES/VENDEUR')[]','varchar(100)') = t2.xml.value('(/ENTITE/VENDEUR')[1],'varchar(100)')

    Par contre les performances sont décevante et je me demande si j'ai emprunté le bon chemin !!! Meme en travaillant sur mon poste pour test, la requete au bout de 15 minutes ne retourne pas l’intégralité des informations, sachant que ma table donnees_complementaires contient un peu moins de 1.000.000 d'enregistrements et ma table donnees_de_bases environ 7.000

    Merci de vos remarques et piste de recheche ...

  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 904
    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 904
    Points : 51 649
    Points
    51 649
    Billets dans le blog
    6
    Par défaut
    Sans le plan d'exécution, difficile de te répondre. Mais le XML se comporte de manière itérative (extraction d'XML et typage à la volée) et ne peut pas comporter de statistiques sur les données extraites qui sont nécessaire pour choisir l'algorithme de jointure. Je te parie que les cardinalités sont de 1 de part et d'autre de la jointure.
    Dans ce cas tu peut forcer une jointure en HASH pour tenter de réduire le temps de traitement.

    A +

  3. #3
    Futur Membre du Club
    Homme Profil pro
    NONE
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NONE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour SQLPro,

    J'ai exécuté la requête avec un top 10, 1000 et 100000 en activant le plan d’exécution et il y a effectivement deux opérations qui représente 98% du cout de traitement :

    Le Hash Match (Inner join) --> 41%,
    Clustered Index Seek (PrimalyXML) --> 57%.

    Mais j'avoue être novice sur cette partie. Aprés avoir regardé le plan d’exécution il semble effectivement qu'il fait une cardinalité 1:1 (HASH : ([Expr1019]) = ([Expr1011]), RESIDUAL : ([Expr1011] = [Expr1019]))
    Pouvez vous m'indiquez comment je peux influer sur ce HASH, ou me donner un lien vers un tuto ou une page explicative.

    Je profite de l'occasion pour vous remercier de tous vos tutos et billets qui m'ont souvent aidés par le passé.

    A+

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 904
    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 904
    Points : 51 649
    Points
    51 649
    Billets dans le blog
    6
    Par défaut
    Tu n'as pas répondu sur le plan... D'autre part quelle version de SQL ?

    Enfin, il n'y a pas de miracle. Le XML n'est pas fait pour faire du relationnel. Le mieux serait d'exposer les balises qui doivent faire la jointure en relationnel dans une table fille.

    A +

  5. #5
    Futur Membre du Club
    Homme Profil pro
    NONE
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NONE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    D'autre part quelle version de SQL
    J'utilise pour l'instant la version 2008r2.

    Enfin, il n'y a pas de miracle. Le XML n'est pas fait pour faire du relationnel. Le mieux serait d'exposer les balises qui doivent faire la jointure en relationnel dans une table fille.
    J'ai commencé des modifications de mon modèle dans ce sens.

    Tu n'as pas répondu sur le plan...
    Je joins deux fichiers avec le plan d’exécution (texte et img).


    Merci de votre aide.
    A+
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  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
    21 904
    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 904
    Points : 51 649
    Points
    51 649
    Billets dans le blog
    6
    Par défaut
    Poste le XML du plan STP

    A +

  7. #7
    Futur Membre du Club
    Homme Profil pro
    NONE
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NONE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    J'ai joint le fichier mais j'ai du renommer l’extension sqlplan en xml sinon le fichier n’était pas accepté.

    a+
    Fichiers attachés Fichiers attachés

  8. #8
    Futur Membre du Club
    Homme Profil pro
    NONE
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NONE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Pour améliorer les performances de traitements j'ai modifié mon modele de données. Si vous avez pu jetter un oeil sur mon plan d'execution pourriez vous m'indiquer les points sur lequels je pouvais agir.

    merci de votre retour.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2014, 19h01
  2. jointure entre deux tables mysql
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 23/04/2006, 20h08
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 18h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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