Efficient Pagination with Skip/Take

Efficient pagination using OFFSET-FETCH on SQL Server.

Execution Time

14 ms

Page Size

25

Current Page

20 / 978

Total Records

24441

Items per page: 25 50 100 200

Page 20 Results Showing 476 - 500 of 24441

ID Name Category Price Stock Rating Reviews SKU
529 Ultra Automotive Product Plus Automotive $333.72 104 3.7 205 SKU-000529
530 Economy Toys & Games Product Mini Toys & Games $344.11 234 1.4 99 SKU-000530
532 Ultra Automotive Product Plus Automotive $232.07 236 3.0 412 SKU-000532
533 Super Health & Beauty Product Lite Health & Beauty $888.41 470 3.0 453 SKU-000533
534 Deluxe Books Product 2024 Books $991.87 408 2.3 933 SKU-000534
535 Professional Sports & Outdoors Product XL Sports & Outdoors $177.24 110 4.1 902 SKU-000535
536 Deluxe Clothing Product Pro Clothing $490.41 270 3.0 872 SKU-000536
537 Economy Office Supplies Product XL Office Supplies $937.15 171 1.3 951 SKU-000537
538 Super Toys & Games Product Advanced Toys & Games $544.09 174 4.8 815 SKU-000538
539 Elite Home & Garden Product Classic Home & Garden $209.34 116 4.3 852 SKU-000539
540 Standard Automotive Product Max Automotive $933.88 10 3.2 172 SKU-000540
541 Pro Books Product XL Books $319.96 280 4.2 349 SKU-000541
542 Super Electronics Product Mini Electronics $398.57 120 2.1 480 SKU-000542
543 Ultra Health & Beauty Product Plus Health & Beauty $450.25 246 1.8 61 SKU-000543
544 Standard Health & Beauty Product Max Health & Beauty $470.95 192 2.0 577 SKU-000544
545 Professional Clothing Product Lite Clothing $99.37 90 2.3 941 SKU-000545
547 Super Office Supplies Product Pro Office Supplies $533.41 111 1.8 231 SKU-000547
548 Deluxe Sports & Outdoors Product 2024 Sports & Outdoors $339.49 138 2.5 594 SKU-000548
549 Deluxe Books Product Classic Books $47.34 117 1.3 468 SKU-000549
550 Super Office Supplies Product Plus Office Supplies $518.64 456 2.0 113 SKU-000550
551 Professional Office Supplies Product Plus Office Supplies $191.93 368 1.6 508 SKU-000551
552 Pro Food & Grocery Product Classic Food & Grocery $293.50 277 1.3 956 SKU-000552
553 Pro Health & Beauty Product Max Health & Beauty $509.33 9 4.4 450 SKU-000553
554 Ultra Automotive Product Lite Automotive $467.20 424 3.3 288 SKU-000554
555 Standard Automotive Product Pro Automotive $654.94 468 4.0 400 SKU-000555
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