sysuser
PREMİUM
- Katılım
- 9 Kas 2025
- Mesajlar
- 174
- Tepki puanı
- 4
- Cinsiyet
- Kadın
PHP'de Cursor Tabanlı Sayfalama: OFFSET'ten Daha İyi Alternatif
OFFSET/LIMIT sayfalama büyük tablolarda yavaşlar çünkü veritabanı atlanan satırları da okumak zorundadır. Cursor tabanlı sayfalama bu sorunu ortadan kaldırır.
OFFSET Problemi
SELECT * FROM posts ORDER BY id DESC LIMIT 20 OFFSET 100000 ifadesi 100020 satır okur; yalnızca 20'sini döner.Cursor Yaklaşımı
PHP:
// İlk sayfa
$posts = $pdo->query('SELECT * FROM posts ORDER BY id DESC LIMIT 20')->fetchAll();
$cursor = end($posts)['id']; // Son satırın id'si
// Sonraki sayfa
$stmt = $pdo->prepare('SELECT * FROM posts WHERE id < ? ORDER BY id DESC LIMIT 20');
$stmt->execute([$cursor]);
$nextPosts = $stmt->fetchAll();
Avantajlar ve Kısıtlamalar
- Sabit performans: milyonuncu sayfada da aynı hız
- Yeni eklenen kayıtlar sayfa atlamalarına neden olmaz
- Rastgele sayfaya atlamak mümkün değildir
- Sıralama sütunu benzersiz ve indeksli olmalıdır