Bonjour à tous,
Tout d’abord désolé si un sujet semblable a déjà été posté, j’ai fais quelques recherches et j’ai trouvé des indices, mais rien précisément qui répondait exactement à ma question.
En fait j’aimerais avoir vos conseils par rapport à la formulation de cette requête :
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 DECLARE @client# XML SET @client# = '<clients><id>234</id><id>231</id><id>228</id><id>1618</id><id>224</id><id>223</id><id>217</id><id>205</id></clients>' DECLARE @DateDebut# DATETIME SET @DateDebut# = '2010-07-27' DECLARE @DateFin# DATETIME SET @DateFin# = '2010-08-27' SELECT ParamValues.ID.value('.', 'INT') AS ID INTO #clientList FROM @client#.nodes('/clients/id') AS ParamValues ( ID ) SELECT o.OperationID , s.FKModuleID , c.ClientID FROM dbo.Operation o INNER JOIN dbo.clients c ON c.ClientID = o.FKClientID AND o.OperationType IN ( 1, 10 ) AND o.OperationState IN ( 0, 3 ) AND c.Update = 1 AND o.Update = 1 AND ISNULL(c.Dead, 0) = 0 INNER JOIN dbo.Stages s ON s.FkOperationID = o.OperationID AND s.UniqueID = ( SELECT ISNULL(MAX(UniqueID), -1) AS ID FROM Stages WHERE FKOperationID = o.OperationID AND StageState = 0 ) AND s.DateStage >= @DateDebut# AND s.DateStage <= @DateFin# INNER JOIN #clientList pl ON pl.ID = c.ClientID DROP TABLE #clientList
La partie dans le 2e « INNER JOIN » :
Cette partie, lorsque je passe une longue liste de clients, mais surtout lorsque j’allonge raisonnablement l’intervalle de dates, ralentit énormément le temps de réponse de la requête. Je me demandais, remarquez-vous quelque chose au niveau de la syntaxe qui pourrait être optimisé? Car à priori je semble procéder de la bonne façon, peut-être dois-je juste me résoudre à l’idée que le traitement prendra toujours un temps considérable en fonction de l’intervalle de dates et de la liste de clients.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 AND s.UniqueID = ( SELECT ISNULL(MAX(UniqueID), -1) AS ID FROM Stages WHERE FKOperationID = o.OperationID AND StageState = 0 )
Merci à l’avance des conseils que vous pourrez m’apporter à ce sujet!
Partager