SQL Server gespeicherte Prozedur wesentlich langsamer als die geraden Abfrage

Ich habe eine Tabelle mit über 100MM Datensätze. Die Tabelle besitzt einen gruppierten index und ein nicht gruppierter index.

Ich einen basic-Anzahl durch die Verwendung von T-SQL auf dem Tisch, und es dauert 1 Sekunde zu laufen. Wenn ich die gleiche genaue Anzahl Abfrage innerhalb einer gespeicherten Prozedur es dauert dann 12 Sekunden zu laufen.

Ich habe mir den plan für die Ausführung der standard-Abfrage und die gespeicherte Prozedur, und Sie werden beide mit der nicht gruppierte index.

Ich bin nicht sicher, warum die gespeicherte Prozedur ist so langsam im Vergleich zu den standard-Abfrage.

Ich habe einige Sachen über Neuindizierung in einer situation wie dieser, aber ich bin nicht sicher, warum ich brauche, um zu tun. Auch, es dauert ein paar Stunden, um reindex so möchte ich sicherstellen, dass das funktionieren wird.

Jede Hilfe zu diesem wäre toll.

Dank

UPDATE

Hier wird die gespeicherte Prozedur:

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

und hier ist die standard-Abfrage:

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

Ich habe versucht es ohne Parameter ausführen und der SP läuft schneller (1 Sekunde). Also gehe ich davon aus, dass es hat etwas zu tun mit den Parametern.

  • Können Sie uns zeigen, ein bisschen von der SP, doe Sie pass in Parameter?
  • Ich denke, du wirst brauchen, um Ihre Abfrage, und SP.
  • Es kann passieren, Sie habe versucht die Abfrage mit Konstanten und Ihre Vorgehensweise verwenden Sie stattdessen die Parameter dieser Konstanten. Ich schlage vor, Sie erstellen SQLFiddle Beispiel oder post, einige details über das schema und query/sp
  • Führen Sie beide gegen einen "kalten" Seite-Puffer? Oder welche der beiden Sie zum ersten mal ausgeführt? Ich würde versuchen, das zu tun DBCC DROPCLEANBUFFERS und DBCC FREEPROCCACHE vor dem ausführen entweder von denen zwei nicht der Zeitpunkt der Ausführung Unterschied noch auftreten? Oder sind beide die gleiche Geschwindigkeit jetzt?
  • Sollte keine Rolle spielen, afaik, aber könnten Sie versuchen, die einfachen Abfrage mit SET ANSI_NULLS ON?
InformationsquelleAutor Sequenzia | 2012-10-22
Schreibe einen Kommentar