Hello,
J'ai mis le doigt sur une requête qui a gros problèmes de performances, lorsque les clauses du where sont variabilisés alors que cela est immédiat lorsque les valeurs sont passées en "dur".
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 set statistics time on set statistics io on go DECLARE @GRRE_Cod AS TINYINT, @CECP_OrgDes AS SMALLINT, @ENBO_SITE_CodFac AS SMALLINT SET @GRRE_Cod = 1 SET @CECP_OrgDes = 931 SET @ENBO_SITE_CodFac = 319 SELECT TOP 1 ENBO.ENBO_Lot FROM dbo.ENBO_EnteteBordereauTP ENBO with (nolock) INNER JOIN dbo.CECP_CentreCPAM CECP with (nolock) ON ENBO.ENBO_CECP_GRRE_CodFac = CECP.CECP_GRRE_Cod AND ENBO.ENBO_CECP_CPAM_CodFac = CECP.CECP_CPAM_Cod AND (ENBO.ENBO_CECP_CodFac = CECP.CECP_Cod or ENBO.ENBO_CECP_CodFac is null) WHERE CECP.CECP_GRRE_Cod = @GRRE_Cod AND CECP.CECP_OrgDes = @CECP_OrgDes AND ENBO.ENBO_SITE_CodFac = @ENBO_SITE_CodFac AND ENBO.ENBO_Lot IS NOT NULL ORDER BY ENBO.ENBO_DatBor DESC ,CAST(ENBO.ENBO_Lot AS int) DESC go set statistics time off set statistics io off go
logical reads 4789929 - elapsed time = 18094 ms
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 SQL Server parse and compile time: CPU time = 20 ms, elapsed time = 20 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. (1 row(s) affected) Table 'ENBO_EnteteBordereauTP'. Scan count 112, logical reads 4789929, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'CECP_CentreCPAM'. Scan count 1, logical reads 142, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. SQL Server Execution Times: CPU time = 18080 ms, elapsed time = 18094 ms.
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 set statistics time on set statistics io on go SELECT TOP 1 ENBO.ENBO_Lot FROM dbo.ENBO_EnteteBordereauTP ENBO with (nolock) INNER JOIN dbo.CECP_CentreCPAM CECP with (nolock) ON ENBO.ENBO_CECP_GRRE_CodFac = CECP.CECP_GRRE_Cod AND ENBO.ENBO_CECP_CPAM_CodFac = CECP.CECP_CPAM_Cod AND (ENBO.ENBO_CECP_CodFac = CECP.CECP_Cod or ENBO.ENBO_CECP_CodFac is null) WHERE CECP.CECP_GRRE_Cod = 1 AND CECP.CECP_OrgDes = 931 AND ENBO.ENBO_SITE_CodFac = 319 AND ENBO.ENBO_Lot IS NOT NULL ORDER BY ENBO.ENBO_DatBor DESC, CAST(ENBO.ENBO_Lot AS int) DESC go set statistics time off set statistics io offlogical reads 20461 - elapsed time = 502 ms
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. (1 row(s) affected) Table 'CECP_CentreCPAM'. Scan count 6, logical reads 504, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'ENBO_EnteteBordereauTP'. Scan count 1, logical reads 20461, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. SQL Server Execution Times: CPU time = 515 ms, elapsed time = 502 ms.
Quelqu'un a t'il une explication du pourquoi une telle différence, alors que le plan devrai être le même?
Merci d'avance
Partager