Pagination Patterns — Database

Mengapa Pagination? Mengembalikan semua data sekaligus boros memori dan lambat. Pagination membagi data menjadi halaman-halaman kecil yang lebih efisien. 1. Off

Mengapa Pagination?

Mengembalikan semua data sekaligus boros memori dan lambat. Pagination membagi data menjadi halaman-halaman kecil yang lebih efisien.

1. Offset-based Pagination

Cara paling umum, menggunakan LIMIT dan OFFSET.

-- Halaman 1 (item 1-10)
SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 0;

-- Halaman 2 (item 11-20)
SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 10;

-- Halaman 5 (item 41-50)
SELECT * FROM products ORDER BY id LIMIT 10 OFFSET 40;

Masalah Offset Pagination

⚠️ Skenario produksi nyata: aplikasi kamu tumbuh dari 10k ke 1 juta produk. Endpoint /products?page=5000 (OFFSET 49990 LIMIT 10) yang tadinya 50ms kini jadi 3 detik. Database tetap harus membaca 49990 baris sebelum membuang-nya — index tidak membantu OFFSET. Solusinya bukan index tambahan, tapi ganti ke cursor-based pagination.

2. Cursor-based Pagination

Menggunakan nilai terakhir sebagai titik referensi, bukan offset.

-- Halaman pertama
SELECT * FROM products ORDER BY id LIMIT 10;
-- Last item id = 10

-- Halaman berikutnya (setelah id 10)
SELECT * FROM products WHERE id > 10 ORDER BY id LIMIT 10;
-- Last item id = 20

-- Halaman berikutnya (setelah id 20)
SELECT * FROM products WHERE id > 20 ORDER BY id LIMIT 10;

Keunggulan Cursor Pagination

Kapan Menggunakan Apa?

Yang akan kamu pelajari