Efficient Pagination with Skip/Take

Efficient pagination using OFFSET-FETCH on SQL Server.

Execution Time

42 ms

Page Size

25

Current Page

291 / 978

Total Records

24441

Items per page: 25 50 100 200

Page 291 Results Showing 7251 - 7275 of 24441

ID Name Category Price Stock Rating Reviews SKU
7810 Bulk Product a39dba02 Home & Garden $129.87 158 3.3 91 BULK-1cf57d42
7811 Bulk Product 4fd7862b Home & Garden $422.71 246 3.0 90 BULK-52ce0bfa
7812 Bulk Product d4204f83 Books $743.38 316 5.0 96 BULK-47ed5897
7813 Bulk Product e966f337 Sports & Outdoors $744.65 51 1.0 22 BULK-73425969
7814 Bulk Product d1cbbbc7 Clothing $506.81 109 2.6 69 BULK-e7878b70
7815 Bulk Product b6135701 Electronics $628.55 316 1.3 73 BULK-01cfaad2
7816 Bulk Product bdce91c3 Sports & Outdoors $422.71 112 4.6 53 BULK-d84d7455
7817 Bulk Product d2fe56f8 Books $989.34 69 4.9 18 BULK-c4fd507c
7818 Bulk Product abdfd9fa Books $254.28 53 3.4 5 BULK-a212fb9a
7819 Bulk Product 98e3167b Toys & Games $970.59 44 4.7 54 BULK-055233bb
7820 Bulk Product 90ca5452 Toys & Games $459.45 479 4.1 69 BULK-3a3aa484
7821 Bulk Product a0482d5c Clothing $687.97 417 1.2 34 BULK-95b57efc
7822 Bulk Product db578f1c Sports & Outdoors $275.94 141 4.0 70 BULK-a845d8d0
7823 Bulk Product 625883c3 Books $112.17 85 4.2 3 BULK-f9313460
7824 Bulk Product 51b4a6ea Toys & Games $706.83 302 2.7 35 BULK-bae6605e
7825 Bulk Product 6981f79f Clothing $999.73 456 3.5 54 BULK-c131c74c
7826 Bulk Product b3d25a77 Clothing $882.83 237 0.1 63 BULK-6b0af0e7
7827 Bulk Product 1fc78970 Sports & Outdoors $42.32 220 4.9 27 BULK-34f17e25
7828 Bulk Product df3e39fc Home & Garden $268.17 123 1.6 31 BULK-832c8a0c
7829 Bulk Product 923612ed Clothing $397.47 288 3.4 71 BULK-affde053
7830 Bulk Product 484f8b28 Electronics $261.95 490 3.1 13 BULK-95d613dd
7831 Bulk Product 2c9bdd3a Books $996.70 248 4.8 17 BULK-aac08a0b
7832 Bulk Product c66933c2 Electronics $418.47 414 0.9 47 BULK-b430b4af
7833 Bulk Product ec7f4a2b Toys & Games $170.46 295 1.2 64 BULK-b2ac5b81
7834 Bulk Product 59074f12 Home & Garden $698.71 189 4.8 94 BULK-f3251ebb
Implementation Code
// Efficient pagination with Skip and Take
public async Task<PaginatedResult<DemoProduct>> GetPaginatedProductsAsync(int page, int pageSize)
{
    // Get total count (cached if possible)
    var totalCount = await _context.DemoProducts.CountAsync(p => p.IsActive);
    
    // Get page of results
    var items = await _context.DemoProducts
        .Where(p => p.IsActive)
        .OrderBy(p => p.Id) // Important: Must have ORDER BY for consistent paging
        .Skip((page - 1) * pageSize) // OFFSET in SQL
        .Take(pageSize) // FETCH NEXT in SQL
        .AsNoTracking() // No tracking needed for read-only
        .ToListAsync();

    return new PaginatedResult<DemoProduct>
    {
        Items = items,
        TotalCount = totalCount,
        Page = page,
        PageSize = pageSize
    };
}
Pagination Best Practices
  • Always use OrderBy: Skip/Take require stable sorting for consistent results
  • Use AsNoTracking(): Pagination queries are typically read-only
  • Consider caching: Cache total count if dataset changes infrequently
  • Limit max page size: Prevent users from requesting too many records at once
  • Use indexed columns: Ensure ORDER BY columns are indexed for performance