Efficient Pagination with Skip/Take

Efficient pagination using OFFSET-FETCH on SQL Server.

Execution Time

48 ms

Page Size

25

Current Page

322 / 978

Total Records

24441

Items per page: 25 50 100 200

Page 322 Results Showing 8026 - 8050 of 24441

ID Name Category Price Stock Rating Reviews SKU
8585 Bulk Product 8ae982a0 Sports & Outdoors $213.27 198 0.4 26 BULK-9caf3a84
8586 Bulk Product 1f5ec184 Toys & Games $643.55 412 4.6 47 BULK-e65735a0
8587 Bulk Product a9613279 Clothing $116.16 444 1.2 89 BULK-2af61c40
8588 Bulk Product ad579172 Books $917.05 256 3.3 87 BULK-158c2ca0
8589 Bulk Product eb41be88 Books $195.25 319 4.1 90 BULK-a717f4cf
8590 Bulk Product ae642e32 Books $50.28 441 0.8 43 BULK-76e2c575
8591 Bulk Product 6ed6274a Clothing $788.45 139 1.1 24 BULK-2896918f
8592 Bulk Product a4de2db3 Clothing $625.53 379 1.3 94 BULK-25bd5695
8593 Bulk Product c844e09e Toys & Games $370.08 399 1.2 84 BULK-1eb0b27b
8594 Bulk Product 12d906f4 Books $959.88 47 0.5 4 BULK-636a1721
8595 Bulk Product 18bc3cff Electronics $768.36 279 0.6 8 BULK-d4ab4745
8596 Bulk Product 7f46bae3 Sports & Outdoors $463.34 247 3.8 82 BULK-98d2d9af
8597 Bulk Product 8e297c09 Home & Garden $756.39 118 0.8 50 BULK-9fee1090
8598 Bulk Product cfc5a997 Toys & Games $968.87 327 3.8 33 BULK-3fe0c260
8599 Bulk Product 9cf9acdb Home & Garden $365.04 209 0.1 73 BULK-cd5021a9
8600 Bulk Product 0d66d749 Sports & Outdoors $576.88 93 4.4 72 BULK-be0866b7
8601 Bulk Product 50db41d0 Books $635.52 350 2.2 17 BULK-f221580c
8602 Bulk Product 1f765a33 Toys & Games $204.10 470 3.1 84 BULK-e8bd7810
8603 Bulk Product 5c7b0d11 Toys & Games $282.07 179 2.4 89 BULK-6bcd805b
8604 Bulk Product dc2c86dc Home & Garden $750.90 23 4.0 47 BULK-71403456
8605 Bulk Product 43d973b5 Clothing $968.61 417 4.2 63 BULK-699726e7
8606 Bulk Product f2531047 Books $594.93 80 3.2 24 BULK-ce20b706
8607 Bulk Product f19de393 Sports & Outdoors $193.78 183 2.4 87 BULK-b9ee80e5
8608 Bulk Product 526614e4 Books $367.22 337 1.0 4 BULK-a14e7a58
8609 Bulk Product e839486d Home & Garden $970.34 398 1.4 8 BULK-740ba356
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