Bonjour,

J'ai développé une application de gestion de stock avec Delphi 6. La base de données est sous SQL Serveur. L'ouverture d'un table (TADOTable.Open) qui est lie à une vue (view) de la base de données prend sur mon PC de développement (pour un résultat qui retourne 23000 linges) quelques secondes (2-10 seconds) mais sur le Serveur de production plus de 10 minutes.

voici ci-dessous la requête SQL qui générée la vue:
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
 
SELECT     dbo.CDM.CBCDM, dbo.PRD.Designation, dbo.CDM.CodePRD, dbo.CDM.CodeInventaire, 
                      dbo.CDM.NumSerieCDM, dbo.CLS.LibelleCLS, dbo.CTGR.LibelleCTGR, 
                      dbo.CDM.EtatCDM, dbo.CDM.DateR, dbo.DR.PrixAchatHT, 
                      dbo.FRS.RS AS RSFRS, dbo.CDM.Observation, dbo.DPT.CodeDPT, dbo.DPT.LibelleDPT, 
                      dbo.MGZ.CodeMGZ, dbo.MGZ.LibelleMGZ, dbo.CMPT.LibelleCMPT, dbo.RYN.LibelleRYN, 
                      dbo.ETGR.LibelleETGR, dbo.TM.LibelleMVT AS MvtR, dbo.CDM.NumR, 
                      TM_1.LibelleMVT AS MvtSRT, dbo.SRT.NumSRT, dbo.SRT.DateSRT, dbo.SRT.LibelleNV, 
                      dbo.PRT.RS AS RSPRT, dbo.R.TypeR, dbo.SRT.Agent AS AgentSRT, 
                      dbo.R.Agent AS AgentR, dbo.CDM.CDMStatut, dbo.CDM.DatePeremption, 
                      dbo.CDM.PrixUnitaireR, dbo.CDM.QuantiteStock, dbo.CDM.QuantiteR
FROM         dbo.FRS RIGHT OUTER JOIN
                      dbo.DRC INNER JOIN
                      dbo.R INNER JOIN
                      dbo.DR ON dbo.R.NumR = dbo.DR.NumR INNER JOIN
                      dbo.TM ON dbo.R.TypeR = dbo.TM.TM ON 
                      dbo.DRC.NumR = dbo.DR.NumR AND 
                      dbo.DRC.CodePRD = dbo.DR.CodePRD LEFT OUTER JOIN
                      dbo.PRT ON dbo.R.CodePRT = dbo.PRT.CodePRT ON 
                      dbo.FRS.CodeFRS = dbo.R.CodeFRS RIGHT OUTER JOIN
                      dbo.DS INNER JOIN
                      dbo.DSC ON dbo.DS.NumSRT = dbo.DSC.NumSRT AND 
                      dbo.DS.CodePRD = dbo.DSC.CodePRD INNER JOIN
                      dbo.SRT ON dbo.DS.NumSRT = dbo.SRT.NumSRT INNER JOIN
                      dbo.TM AS TM_1 ON dbo.SRT.TypeSRT = TM_1.TM RIGHT OUTER JOIN
                      dbo.ETGR RIGHT OUTER JOIN
                      dbo.CDM ON dbo.ETGR.CodeETGR = dbo.CDM.CodeETGR LEFT OUTER JOIN
                      dbo.CLS INNER JOIN
                      dbo.SC ON dbo.CLS.CodeCLS = dbo.SC.CodeCLS INNER JOIN
                      dbo.CTGR ON dbo.CLS.CodeCTGR = dbo.CTGR.CodeCTGR RIGHT OUTER JOIN
                      dbo.PRD ON dbo.SC.CodeSC = dbo.PRD.CodeSC LEFT OUTER JOIN
                      dbo.MRQ ON dbo.PRD.CodeMRQ = dbo.MRQ.CodeMRQ ON dbo.CDM.CodePRD = dbo.PRD.CodePRD ON 
                      dbo.DSC.CBCDM = dbo.CDM.CBCDM AND 
                      dbo.DSC.NumR = dbo.CDM.NumR ON 
                      dbo.DRC.CBCDM = dbo.CDM.CBCDM AND 
                      dbo.DRC.NumR = dbo.CDM.NumR LEFT OUTER JOIN
                      dbo.RYN ON dbo.ETGR.CodeRYN = dbo.RYN.CodeRYN LEFT OUTER JOIN
                      dbo.CMPT ON dbo.RYN.CodeCMPT = dbo.CMPT.CodeCMPT LEFT OUTER JOIN
                      dbo.MGZ ON dbo.CMPT.CodeMGZ = dbo.MGZ.CodeMGZ LEFT OUTER JOIN
                      dbo.DPT ON dbo.MGZ.CodeDPT = dbo.DPT.CodeDPT
J'ai eu le même problème de lenteur sur un autre PC qui tourne sous Windows7 avec SQL Serveur 2008.

Voici un résume de temps d'exécution de la même requête avec la même quantité de données :

Developpement (laptop HP): Windows XP-SP3 + SQL Server 2005 : 2-6 secs
Developpement (laptop HP): Windows XP-SP3 + SQL Server 2008 : 2-6 secs
Teste (laptop Acer): Windows 7 + SQL Server 2008 : plus de 12 minutes
Production (Server HP): Windows 2003 server + SQL Server 2005 : plus de 12 minutes

Je suis vraiment bloqué à cause de ce problème de lenteur .

Merci d'avance pour votre aide.

Cdt,
Burkan