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 :

[SQL 2000] Optimisation requête avec jointure multiple


Sujet :

Développement SQL Server

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut [SQL 2000] Optimisation requête avec jointure multiple
    Salut

    j'ai un souci d'optimisation mais je ne sais pas par quel bout le prendre.
    Voici d'abords mes tables :
    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
     
    CREATE TABLE [dbo].[Zone_Contenu] (
    	[Id_Zone] [int] NOT NULL ,
    	[Id_Decoupage] [int] NOT NULL ,
    	[Effet] [int] NOT NULL 
    ) ON [PRIMARY]
    GO
     
    CREATE TABLE [dbo].[Decoupage] (
    	[Id_Dec] [int] IDENTITY (1, 1) NOT NULL ,
    	[Nom_Dec] [varchar] (200) COLLATE French_CI_AS NULL ,
    	[Type_Dec] [int] NULL ,
    	[Dec_Parent] [int] NULL ,
    	[Numero_Dec] [varchar] (10) COLLATE French_CI_AS NULL ,
    	[Ordre] [int] NULL 
    ) ON [PRIMARY]
    GO
    Dans la table découpage j'ai des pays, des régions, des département, des arrondissements et des communes. Le tout fonctionnant avec le principe des id et id_parent pour savoir qui est dans quoi.
    Dans la table Zone_Contenu j'ai une liste de découpage (Id_Dec).
    Pour l'instant je lance cette requête là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select distinct DC.Id_Zone, DC.Nom_Zone from
    zone_contenu T
    --inner join Decoupage DP on dp.id_zone = T.id_Decoupage
    --inner join Decoupage DR on dr.id_zone = T.id_Decoupage --or DR.zone_Parent = DP.id_zone
    inner join Decoupage DD on dd.id_zone = T.id_Decoupage --or DD.zone_Parent = DR.id_zone 
    inner join Decoupage DA on da.id_zone = T.id_Decoupage or DA.zone_Parent = DD.id_zone
    inner join Decoupage DC on dc.id_zone = T.id_Decoupage or DC.zone_Parent = DA.id_zone
    where T.Effet = 0
    Avec ce que j'ai dans la table Zone_Contenu j'ai un résultat de 226 lignes en 2 secondes. Les 226 lignes bien celles que j'attends, ni plus, ni moins.
    Par contre, si je remets en place la jointure avec l'alias DR, j'ai toujours mes 226 lignes mais en 9 secondes.
    Et si je remets en place la jointure avec l'alias DP je passe à 17 secondes.

    J'aimerais optimiser cela de manière à rester à 2 secondes, vu que ça me rammène pas plus de lignes, car cette requête va être appellée trés souvent sur le site que je programme. Vu qu'on est sur du NET faut que ça aille vite.
    Surtout qu'en plus, le résultat de cette requête être utiliser dans une autre requête ensuite, avant de restituer un résultat sur le site.

    Pouvez-vous m'aider ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Il y a quoi comme index ?
    17 secondes ou même 9 secondes je trouve ça très long pour seulement 226 lignes. J'ai l'impression qu'il y a aucun index.

  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
    21 772
    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 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Votre modèle de données me parait incorrect car faire des OR dans des jointures avec des tables différentes n'est pas franchement bon.

    Donnez un jeu d'exemple sous forme d'insert (s'il est long zipé le).

    Expliquez la sémantique de votre modèle : son but, à quoi il sert.

    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
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Bon, ça va être un peu compliqué de filer un jeu de donnée car j'ai plus de 40000 lignes dans la table Decoupage.

    Sinon en matière d'explication c'est assez simple :
    la talbe découpage contient la liste des régions, département, arrodissment et commune de France. Sur chaque ligne il y a un "Id_parent" qui est celui du découpage de niveau supérieur. Exemple pour être clair :
    La Baule fait partie de l'arrondissement de St nazaire qui fait partie du département Loire Atlantique. Donc on a les lignes suivantes :
    Id_dec Nom_dec Type_dec Dec_Parent
    ----------- ----------- -----------
    291 Loire-Atlantique 3 215
    568 Arrd de Saint-Nazaire 4 291
    76923 Baule-Escoublac 5 568
    L'idée est donc de pouvoir récupérer une liste de commune à partir de n'importe quelle entrée dans la table.

    Dans l'autre table "Zone_Contenu" on va définir des zones avec un identifiant de zone pour aller chercher dans une autre table des infos générales sur cette zone (son nom par exemple) et un identifiant de découpage. Comma ça on peut mettre un département + un arrodissment d'un autre département + une ville à l'autre bout de la France et on obtient une liste de commune à la fin.
    La colonne "Effet" vient là pour faire de l'exclusion. Lorsqu'elle est à 0 il faut ajouter les villes, lorsqu'elle est à 1 il fut les retirer de la liste. Cette partie n'est pas traitée dans ma requête parce que j'ai pas encore trouver le moyen de faire de l'exclusion.

    Voilà, avec ça je pense être complet. Maintenet filer le jeu d'enregistrement complet, ça va être chaud, mais s'il le faut vraiment, je peux tenter. toutefois, ce sont des infos assez générale et je voudrais être persuader que je ne suis pas le premier à avoir un besoins de ce type.

    Merci pour votre aide.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Le plus simple est d'opter pour une rprésentation intervallaire de ton arbre, avec l'ajout du niveau qui déterminera quel type de région il s'agit :
    niveau 1 : planète
    niveau 2 : continent
    niveau 3 : pays
    niveau 4 : région
    niveau 5 : département
    niveau 6 : commune
    ...

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

  6. #6
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Bon, j'opte pour une R&D dans ce sens.
    Je vais boucler mes deux topics sur le sujet, même s'ils ne sont pas redonadant entre eux, ils traitent la même chose.
    Vu que je vais trouver une solution commune, c'est cool.

    Mais j'ai du mal à mettre en place ma base avec des intervalles. J'ai pompé tout le code de l'article qui va bien mais vu que je dois adapter deux ou trois truc, genre faut que je rajoute un champ pour le code postal de la commune.

    Bref, je fini la mise en aplce t eis j'ai des souci je reviens.

    Encore merci à tous.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

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

Discussions similaires

  1. Optimisation d'une requête avec jointure multiple
    Par lucas52 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/03/2012, 14h36
  2. Optimisation requête avec jointure externe SQL Server
    Par ICEMAN_60 dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 10h08
  3. Optimisations requête avec jointures
    Par Superskunk dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/10/2009, 11h05
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. optimisation requête avec jointures externes
    Par beurtom dans le forum Oracle
    Réponses: 14
    Dernier message: 16/10/2006, 16h50

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