Bonjour,
Je me tourne vers vous car il y a un comportement de SQL Server que je ne comprends pas.
Nous avons créé une procédure stockée qui est définie comme suit:
la table ma_table possède une clé primaire (donc clustered) sur le champs1 (et uniquement ce champs là), mais aussi un index non clustered sur un champs2.CREATE PROCEDURE [dbo].[ma_proc]
(
@variable int
)
AS
SET NOCOUNT ON;
Select
*
From
ma_table
Where
(champs1 = @variable Or @variable is null)
GO
Lorsque je regarde le plan d'exécution de la procédure stockée, il fait un index scan en utilisant l'index non clustered sur le champs2 (??? pourquoi ???), alors que si je prend la requête SQL et que je regarde directement le plan d'exécution de celle-ci, il me fait bien un index seek sur la clé primaire positionnée sur le champs1.
Ce n'est pas un problème de statistiques, car je les recalcule et il fait pareil ...
Quelqu'un aurait une explication ???
Partager