PHP'de Cursor Tabanlı Sayfalama: OFFSET'ten Daha İyi Alternatif

  • Konbuyu başlatan Konbuyu başlatan sysuser
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 16

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
 
Geri
Üst