Procédure stockée SQL Server beaucoup plus lent que le droit de requête

J'ai une table avec plus de 100MM enregistrements. La table dispose d'un index cluster et un index non-cluster.

Je peux utiliser une base de comptage à l'aide de T-SQL sur la table et il faut 1 seconde pour s'exécuter. Quand j'ai mis le même nombre exact de requêtes à l'intérieur d'une procédure stockée puis, il faut 12 secondes pour s'exécuter.

J'ai regardé le plan d'exécution de la norme de la requête et la procédure stockée et ils sont tous les deux à l'aide de l'index non-cluster.

Je ne suis pas sûr pourquoi, la procédure stockée est tellement lent par rapport à la requête standard.

J'ai lu quelques trucs à propos de réindexation dans une situation comme ça, mais je ne suis pas sûr pourquoi j'ai besoin de le faire. Aussi, il faut quelques heures pour réindexer donc je veux être sûr que cela va fonctionner.

Toute aide sur ce serait génial.

Grâce

Mise à JOUR

Voici la procédure stockée:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE quickCount 

@sYID INT,
@eYID INT

AS
BEGIN

SET NOCOUNT ON;


    SELECT COUNT(leadID)
    FROM dbo.leads
    WHERE yearID >= @sYID
    AND yearID <= @eYID

END
GO

et voici la requête:

SELECT COUNT(leadID)
FROM leads
WHERE yearID >= 0
AND yearID <= 99

J'ai essayé de l'exécuter sans paramètres et le PS s'exécute de façon plus rapide (1 seconde). Donc je suppose que cela a quelque chose à voir avec les paramètres.

Pouvez-vous nous montrer un peu de la SP, doe, vous pouvez passer des paramètres?
Je pense que vous aurez besoin de montrer votre requête et SP.
Il peut arriver que vous avez essayé de requête avec des constantes et de votre procédure d'utilisation des paramètres au lieu de cela constantes. Je vous suggère de créer SQLFiddle exemple ou poster quelques détails sur le schéma de requête et de/sp
Ne vous lancez à la fois contre un "froid" tampon de page? Ou dont l'un des deux ne vous lancez en premier? Je voudrais essayer de le faire DBCC DROPCLEANBUFFERS et DBCC FREEPROCCACHE avant l'exécution de l'une de ces deux - l'exécution de la différence de temps encore se produire? Ou sont tous les deux la même vitesse maintenant?
Ne compte pas autant que je sache, mais pourriez-vous essayer la plaine de la requête avec SET ANSI_NULLS ON?

OriginalL'auteur Sequenzia | 2012-10-22