Holen Sie sich data von großen Tisch in Chunks

Ich habe einen großen Tisch mit Millionen von Aufzeichnungen. Ich bin bindende diese Tabelle zu gridview in meiner Anwendung. Da data groß sind, rufen wir data mit Paging-Konzepten ab. wie wenn ich die Gridview-Seitengröße auf 2000 setze, dann hole ich nur 2000 datasätze aus der Tabelle. Ich benutze folgendes Query

Select * from (select *, Row_Number() over (order by id) as Row_Index) a where Row_Index > @start_index and Row_Index < @End_Index 

Diese Abfrage läuft schnell für die ersten wenigen Millionen von datasätzen, aber als Start- und Endindex erhöht sich das performancesniveau drastisch. Wie kann ich diese Abfrage verbessern?

Machen Sie Ihre einzigartige Spalte Index (entweder gruppiert von nicht-gruppiert) wie Ihre ID Spalte in Tabelle ist ein guter Kandidat, wenn es keine doppelte ..

Oder füge eine AutoIncremented Column ID hinzu.

Sie können auch solche Abfrage verwenden

 Select top 2000 * from t where ID >= @start_index order by ID 
 DECLARE @From int ,@Thru int -- Example here would be the second set SET @From = 1 SET @Thru = 1000 SELECT <columns> from (select <columns>, row_number() over (order by <PrimaryKey>) Ranking from MyTable) xx where Ranking between @From and @Thru