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 :

rendre une vue plus rapide


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut rendre une vue plus rapide
    Bonjour j'ai une vue avec une requete faisant des jointures sur presque toutes les tables de la base (20) et elle dure 10 minutes á executer.

    Je voulais savoir s'il existait une solution pour rendre la vue plus rapide par rapport á ces 10 minutes

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

    il existe certainement un moyen, je dirai même qu'il en existe surement plusieurs. Mais pour cela, il faudrait qu'on ait au moins la définition de la vue.

    La façon dont vous interrogez la vue ensuite peut également jouer.
    si, "pour tester", vous faites un
    SELECT * FROM MaVue, il est évident que cela mettra plus de temps que si vous sélectionnez seulement les colonnes nécessaires, et que vous filtrez également au maximum.

    Donnez nous un peu plus d'info sur votre vue et ce que vous voulez faire

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    les champs a afficher sont bien précis.
    Cette vue est utilisée pour pouvoir faire une table pivot sous excel.
    voici la requete si cela peut vous aider.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    SELECT dbo.StructGlobalForm.StructGlobalForm_StructName, dbo.StructSegment.StructSegment_Name, dbo.StructBrand.StructBrand_Name, dbo.Brand.Brand_Name, 
                   dbo.Franchise.Franchise_Name AS BrandFranchise, dbo.Segment.Segment_Name, dbo.StructCategory.StructCategory_Name, dbo.Sale.Sale_GSExSeminar, 
                   dbo.Sale.Sale_NSNLExSeminar, dbo.Sale.Sale_CalcNSNLExSeminar, dbo.Customer.Customer_Key, dbo.Customer.Customer_Name, 
                   dbo.Customer.Customer_IsFinancing, dbo.Customer.Customer_IsLicense, dbo.Customer.Customer_IsAtRisk, dbo.Customer.Customer_IsLost, 
                   dbo.Customer.Customer_IsSchool, dbo.Customer.Customer_IsShop, dbo.Customer.Customer_IsNewAccountFY0910, 
                   dbo.Customer.Customer_IsNewAccountFY1011, dbo.Customer.Customer_IsNewAccountFY1112, dbo.Customer.Customer_FYTDGrowingVsLastFY, 
                   dbo.Customer.Customer_ContractTarget, dbo.Customer.Customer_MonthsNotOrdered, Month_1.Month_FY AS FirstOrderMonthFY, 
                   Month_1.Month_FYMonth AS FirstOrderMonthFYMonth, Month_2.Month_FY AS LastOrderMonthFY, Month_2.Month_FYMonth AS LastOrderMonthFYMonth, 
                   Month_3.Month_FY AS NewFirstOrderMonthFY, Month_3.Month_FYMonth AS NewFirstOrderMonthFYMonth, 
                   dbo.CustomerClassification.CustomerClassification_Name, dbo.CustomerTopAccount.CustomerTopAccount_Key, 
                   dbo.CustomerTopAccount.CustomerTopAccount_Text, dbo.District.District_Key, dbo.District.District_Name, dbo.[Group].Group_Key, dbo.[Group].Group_Name, 
                   dbo.Office.Office_Key, dbo.Office.Office_Name, dbo.Country.Country_Name, dbo.SalesRep.SalesRep_Key, dbo.SalesRep.SalesRep_Name, 
                   dbo.KeyAccountDistrict.KADistrict_Key, dbo.KeyAccountDistrict.KADistrict_Name, dbo.KeyAccountRep.KARep_Key, dbo.KeyAccountRep.KARep_Name, 
                   dbo.KeyAccountOffice.KAOffice_Key, dbo.KeyAccountOffice.KAOffice_Name, dbo.KeyAccountGroup.KAGroup_Key, dbo.KeyAccountGroup.KAGroup_Name, 
                   dbo.Month.Month_FY, dbo.Month.Month_FYMonth, dbo.Month.Month_FYQuarter, dbo.Month.Month_12MRolling, dbo.TradeChannel.TradeChannel_Name, 
                   dbo.Segmentation1.Segmentation1_Name AS Segmentation1Base, Segmentation1_1.Segmentation1_Name AS Segmentation112MRolling, 
                   Segmentation1_2.Segmentation1_Name AS Segmentation1Projected
    FROM  dbo.Sale INNER JOIN
                   dbo.StructGlobalForm ON dbo.Sale.Sale_StructGlobalForm_ID = dbo.StructGlobalForm.StructGlobalForm_ID INNER JOIN
                   dbo.StructSegment ON dbo.StructGlobalForm.StructGlobalForm_StructSegment_ID = dbo.StructSegment.StructSegment_ID INNER JOIN
                   dbo.StructBrand ON dbo.StructSegment.StructSegment_StructBrand_ID = dbo.StructBrand.StructBrand_ID INNER JOIN
                   dbo.StructCategory ON dbo.StructBrand.StructBrand_StructCategory_ID = dbo.StructCategory.StructCategory_ID INNER JOIN
                   dbo.Brand ON dbo.StructBrand.StructBrand_Brand_ID = dbo.Brand.Brand_ID INNER JOIN
                   dbo.Franchise ON dbo.Brand.Brand_Franchise_ID = dbo.Franchise.Franchise_ID INNER JOIN
                   dbo.Segment ON dbo.StructSegment.StructSegment_Segment_ID = dbo.Segment.Segment_ID INNER JOIN
                   dbo.Customer ON dbo.Sale.Sale_Customer_ID = dbo.Customer.Customer_ID INNER JOIN
                   dbo.Month ON dbo.Sale.Sale_Month_ID = dbo.Month.Month_ID INNER JOIN
                   dbo.Month AS Month_1 ON dbo.Customer.Customer_FirstOrder_Month_ID = Month_1.Month_ID INNER JOIN
                   dbo.Month AS Month_2 ON dbo.Customer.Customer_LastOrder_Month_ID = Month_2.Month_ID INNER JOIN
                   dbo.Month AS Month_3 ON dbo.Customer.Customer_FirstOrderMonthFY_ID = Month_3.Month_ID INNER JOIN
                   dbo.CustomerClassification ON dbo.Customer.Customer_CustomerClassification_ID = dbo.CustomerClassification.CustomerClassification_ID INNER JOIN
                   dbo.CustomerTopAccount ON dbo.Customer.Customer_CustomerTopAccount_ID = dbo.CustomerTopAccount.CustomerTopAccount_ID INNER JOIN
                   dbo.District ON dbo.Sale.Sale_District_ID = dbo.District.District_ID INNER JOIN
                   dbo.[Group] ON dbo.District.District_Group_ID = dbo.[Group].Group_ID INNER JOIN
                   dbo.Office ON dbo.[Group].Group_Office_ID = dbo.Office.Office_ID INNER JOIN
                   dbo.Country ON dbo.Office.Office_Country_ID = dbo.Country.Country_ID INNER JOIN
                   dbo.SalesRep ON dbo.District.District_SalesRep_ID = dbo.SalesRep.SalesRep_ID INNER JOIN
                   dbo.KeyAccountDistrict ON dbo.Customer.Customer_KADistrict_ID = dbo.KeyAccountDistrict.KADistrict_ID INNER JOIN
                   dbo.KeyAccountRep ON dbo.KeyAccountDistrict.KADistrict_KARep_ID = dbo.KeyAccountRep.KARep_ID INNER JOIN
                   dbo.KeyAccountGroup ON dbo.KeyAccountDistrict.KADistrict_KAGroup_ID = dbo.KeyAccountGroup.KAGroup_ID INNER JOIN
                   dbo.KeyAccountOffice ON dbo.KeyAccountGroup.KAGroup_KAOffice_ID = dbo.KeyAccountOffice.KAOffice_ID INNER JOIN
                   dbo.TradeChannel ON dbo.Sale.Sale_TradeChannel_ID = dbo.TradeChannel.TradeChannel_ID INNER JOIN
                   dbo.Segmentation1 ON dbo.Customer.Customer_Segmentation1_ID = dbo.Segmentation1.Segmentation1_ID INNER JOIN
                   dbo.Segmentation1 AS Segmentation1_1 ON dbo.Customer.Customer_Segmentation12MRolling_ID = Segmentation1_1.Segmentation1_ID INNER JOIN
                   dbo.Segmentation1 AS Segmentation1_2 ON dbo.Customer.Customer_Projected_Segmentation_ID = Segmentation1_2.Segmentation1_ID

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il vous reste à nous communiquer votre version de bd, la volumétrie, la DDL des tables, les indexes et le plan d’exécution...
    http://www.developpez.net/forums/d96...vement-poster/

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Il est impossible d'optimiser cette vue sans savoir :

    - quelles sont les requêtes qui l'utilisent, et leur plan d'exécution
    - quels sont les index sur les tables qui participent à la requête.

    Après un petit débroussaillage, on obtient :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     SELECT		SGF.StructGlobalForm_StructName
    		, SS.StructSegment_Name
    		, SB.StructBrand_Name
    		, B.Brand_Name 
    		, F.Franchise_Name AS BrandFranchise
    		, SEG.Segment_Name
    		, SC.StructCategory_Name
    		, S.Sale_GSExSeminar
    		, S.Sale_NSNLExSeminar
    		, S.Sale_CalcNSNLExSeminar
    		, C.Customer_Key
    		, C.Customer_Name
    		, C.Customer_IsFinancing
    		, C.Customer_IsLicense
    		, C.Customer_IsAtRisk
    		, C.Customer_IsLost
    		, C.Customer_IsSchool
    		, C.Customer_IsShop
    		, C.Customer_IsNewAccountFY0910
    		, C.Customer_IsNewAccountFY1011
    		, C.Customer_IsNewAccountFY1112
    		, C.Customer_FYTDGrowingVsLastFY
    		, C.Customer_ContractTarget
    		, C.Customer_MonthsNotOrdered
    		, M1.Month_FY AS FirstOrderMonthFY
    		, M1.Month_FYMonth AS FirstOrderMonthFYMonth
    		, M2.Month_FY AS LastOrderMonthFY
    		, M2.Month_FYMonth AS LastOrderMonthFYMonth
    		, M3.Month_FY AS NewFirstOrderMonthFY
    		, M3.Month_FYMonth AS NewFirstOrderMonthFYMonth
    		, CC.CustomerClassification_Name
    		, CTA.CustomerTopAccount_Key
    		, CTA.CustomerTopAccount_Text
    		, D.District_Key
    		, D.District_Name
    		, G.Group_Key
    		, G.Group_Name
    		, O.Office_Key
    		, O.Office_Name
    		, CY.Country_Name
    		, SR.SalesRep_Key
    		, SR.SalesRep_Name
    		, KAD.KADistrict_Key
    		, KAD.KADistrict_Name
    		, KAR.KARep_Key
    		, KAR.KARep_Name
    		, KAO.KAOffice_Key
    		, KAO.KAOffice_Name
    		, KAG.KAGroup_Key
    		, KAG.KAGroup_Name
    		, M.Month_FY
    		, M.Month_FYMonth
    		, M.Month_FYQuarter
    		, M.Month_12MRolling
    		, TC.TradeChannel_Name, 
    		, SEG1.Segmentation1_Name AS Segmentation1Base
    		, SEG1_1Segmentation1_Name AS Segmentation112MRolling
    		, SEG1_2.Segmentation1_Name AS Segmentation1Projected
    FROM		dbo.Sale AS S
    INNER JOIN	dbo.StructGlobalForm AS SGF
    			ON S.Sale_StructGlobalForm_ID = dbo.StructGlobalForm.StructGlobalForm_ID 
    INNER JOIN	dbo.StructSegment AS SS
    			ON dbo.StructGlobalForm.StructGlobalForm_StructSegment_ID = SS.StructSegment_ID 
    INNER JOIN	dbo.StructBrand AS SB
    			ON SS.StructSegment_StructBrand_ID = SB.StructBrand_ID 
    INNER JOIN	dbo.StructCategory AS SC
    			ON SB.StructBrand_StructCategory_ID = SC.StructCategory_ID 
    INNER JOIN	dbo.Brand AS B
    			ON SB.StructBrand_Brand_ID = B.Brand_ID 
    INNER JOIN	dbo.Franchise AS F
    			ON B.Brand_Franchise_ID = F.Franchise_ID 
    INNER JOIN	dbo.Segment AS SEG
    			ON SS.StructSegment_Segment_ID = SEG.Segment_ID 
    INNER JOIN	dbo.Customer AS C
    			ON S.Sale_Customer_ID = C.Customer_ID 
    INNER JOIN	dbo.Month AS M
    			ON S.Sale_Month_ID = M.Month_ID 
    INNER JOIN	dbo.Month AS M1
    			ON C.Customer_FirstOrder_Month_ID = M1.Month_ID 
    INNER JOIN	dbo.Month AS M2
    			ON C.Customer_LastOrder_Month_ID = M2.Month_ID 
    INNER JOIN	dbo.Month AS M3
    			ON C.Customer_FirstOrderMonthFY_ID = M3.Month_ID 
    INNER JOIN	dbo.CustomerClassification AS CC
    			ON C.Customer_CustomerClassification_ID = CC.CustomerClassification_ID 
    INNER JOIN	dbo.CustomerTopAccount AS CTA
    			ON C.Customer_CustomerTopAccount_ID = CTA.CustomerTopAccount_ID 
    INNER JOIN	dbo.District AS D
    			ON S.Sale_District_ID = D.District_ID 
    INNER JOIN	dbo.[GROUP] AS G
    			ON D.District_Group_ID = G.Group_ID 
    INNER JOIN	dbo.Office AS O
    			ON G.Group_Office_ID = O.Office_ID 
    INNER JOIN	dbo.Country AS CY
    			ON O.Office_Country_ID = CY.Country_ID 
    INNER JOIN	dbo.SalesRep AS SR
    			ON D.District_SalesRep_ID = SR.SalesRep_ID 
    INNER JOIN	dbo.KeyAccountDistrict AS KAD
    			ON C.Customer_KADistrict_ID = KAD.KADistrict_ID 
    INNER JOIN	dbo.KeyAccountRep AS KAR
    			ON KAD.KADistrict_KARep_ID = KAR.KARep_ID 
    INNER JOIN	dbo.KeyAccountGroup AS KAG
    			ON KAD.KADistrict_KAGroup_ID = KAG.KAGroup_ID 
    INNER JOIN	dbo.KeyAccountOffice AS KAO
    			ON KAG.KAGroup_KAOffice_ID = KAO.KAOffice_ID 
    INNER JOIN	dbo.TradeChannel AS TC
    			ON S.Sale_TradeChannel_ID = TC.TradeChannel_ID 
    INNER JOIN	dbo.Segmentation1 AS SEG1
    			ON C.Customer_Segmentation1_ID = SEG1.Segmentation1_ID 
    INNER JOIN	dbo.Segmentation1 AS SEG1_1
    			ON C.Customer_Segmentation12MRolling_ID = SEG1_1Segmentation1_ID 
    INNER JOIN	dbo.Segmentation1 AS SEG1_2
    			ON C.Customer_Projected_Segmentation_ID = SEG1_2.Segmentation1_ID
    Dans l'attente des plans de requête

    @++

  6. #6
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Malheureusement je ne sais pas ce qu'est un plan de requete.

    Tout ce que je sais, c'est que cette vue est utilisée par excel afin de générer une table Pivot.

    Les index ont été placé sur chaque clé (id) et sur 2-3 et sur toutes les foreign-key.

    En esperant que cela vous ai aidé ?

  7. #7
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    j'oubliais SQLserver 2005 express

Discussions similaires

  1. Créer une macro plus rapide
    Par Sergent_Rupert dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/06/2008, 09h54
  2. Un moyen de rendre mon code plus rapide?
    Par Beluga_71 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/05/2008, 10h36
  3. Rendre les requetes plus rapide
    Par radhwene dans le forum Débuter
    Réponses: 6
    Dernier message: 06/06/2007, 17h10
  4. Réponses: 2
    Dernier message: 12/12/2006, 22h25
  5. rendre une cellule plus claire au passage de la souris
    Par pierrot10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 02/08/2006, 09h29

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