Ich habe die folgende gespeicherte Prozedur, die gegen eine ExtractedMessages
-Tabelle ausgeführt wird, die bis zu 100M Datensätze enthalten kann (100.000.000).Gespeicherte SQL Server-Prozedur-Optimierung
Für die Zwecke meiner Anwendung sollte diese gespeicherte Prozedur in laufen weniger als einer Sekunde
CREATE PROCEDURE GetNextMessages
@taskId bigint
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ci INT
DECLARE @cr INT
SELECT
@ci = CurrentIndex, @cr = CurrentResources
FROM
ExtractedTasks
WHERE
Id = @taskId
UPDATE ExtractedTasks
SET CurrentIndex = @ci + @cr
WHERE Id = @taskId
SELECT *
FROM ExtractedMessages
WHERE TaskId = @taskId
ORDER BY Id
OFFSET @ci ROWS
FETCH NEXT @cr ROWS ONLY
END
NB: cr nicht mehr als 1500
beachten Sie, dass Tabelle _ExtractedMessages_ ist bereits indiziert auf _Id_ und auf _TaskId_ –
Sie haben seltsame Paginierungslogik. –
Brauchen Sie wirklich alle Spalten im Ergebnis? Wenn nein, dann entfernen Sie das '*' und fügen Sie nur die erforderlichen Spalten –