Bonjour,
Je viens à vous car j'ai une requête qui, pour ma part, devrait s'exécuter relativement vite et qui met pourtant un temps considérable à s'exécuter...
Voici la query :
Code sql : 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 USE Tickets; GO WITH T1(SIEGE,DATE,CAISSE,TICKET,EAN,PU,QT,CA,RAB,ESCP,CARTECLIENT) AS( SELECT siege, LaDate, caisse, ticket, eanart, pu, SUM(QT) AS 'QT', SUM(CA) AS 'CA', SUM(RAB) AS 'RAB', SUM(ESCP) AS 'ESCP', CARTECLIENT FROM dbo.tblTransactions WHERE date_dt between '20130701' and '20130702' AND siege = '029' AND qt > 0 GROUP BY siege, LaDate, caisse, ticket, eanart, PU, CARTECLIENT ) SELECT B.*, A.* FROM T1 A INNER JOIN T1 B ON A.SIEGE = B.SIEGE AND A.DATE = B.DATE AND A.CAISSE = B.CAISSE AND A.TICKET = B.TICKET + 1 AND A.EAN = B.EAN AND A.CARTECLIENT = B.CARTECLIENT ORDER BY A.SIEGE, A.DATE, A.CAISSE, A.TICKET
Lorsque j'exécute uniquement la requête créant la CTE, j'ai le résultat en moins d'une seconde. Ca me semble fort qu'une auto jointure rallonge ainsi le temps d'exécution d'autant que la volumétrie de la CTE n'est pas grande (28671 lignes). C'est une vieille table et donc certains colonnes n'ont pas le type de donnée le plus judicieux mais tout de même. Voici le type de colonnes :
- siege : char(3)
- LaDate : datetime
- caisse : char(3)
- ticket : char(4)
- eanart : char(13)
- pu : money
- qt : money
- ca : money
- rab : money
- escp : money
- carteclient : char(18)
En pièce jointe, le plan d'exécution estimé.
De plus, il semblerait (mais ce n'est encore qu'une supposition) que lorsque la requête tourne, certaine applications reçoivent des messages de time out lors d'exécution de procédure stockées. C'est donc assez ennuyeux^^
Partager