ProgramlamaBackend geliştirici

Büyük veri setlerinde SQL'de sayfalama (sayfa bazında çıktı) nasıl gerçekleştirilir ve herhangi bir veri hacminde yüksek performans nasıl sağlanır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Yanıt.

Sayfalama (sayfa bazında çıktı), büyük SELECT sonuçlarının sunucu ve uygulama üzerinde aşırı yük olmadan işlenmesini sağlar. Ana yaklaşımlar:

  • LIMIT/OFFSET — kullanışlı, ancak büyük OFFSET'lerde verimsiz.
  • Keyset pagination (Seek method) — benzersiz/sıralı bir alanın değerine (örneğin, id veya timestamp) göre, "derin" navigasyonda çok daha verimli.

Örnek (LIMIT/OFFSET)

SELECT * FROM Orders ORDER BY OrderID LIMIT 100 OFFSET 1000;

Bu sorgu 1011–1110. kayıtları döndürür. Ancak OFFSET, sunucunun ilk 1000 satırı sıralayıp atlamasını gerektirir — bu nedenle derin sayfalama durumunda yavaşlar.

Örnek (Keyset/Seek method)

SELECT * FROM Orders WHERE OrderID > 1110 ORDER BY OrderID LIMIT 100;

Bu tür bir sorgu, OFFSET sayımına kaynak harcamadan bir sonraki sayfayı hızlı bir şekilde bulur, özellikle OrderID üzerinde bir indeks olduğunda son derece etkilidir.

Kandırmaca sorusu.

Kandırmaca: "Neden LIMIT/OFFSET ile sayfalama büyük veri hacimlerinde kötü çalışabilir ve bunu nasıl iyileştiririz?"

Yanıt: Zorluk, OFFSET'in sunucunun tüm önceki satırları tarayıp sıralamasını gerektirmesidir — derin sayfalara geçtikçe yavaşlar. Optimizasyon — keyset/seek paging'e geçmek: önceki sayfanın son kaydının anahtarına göre seçim yapmak.

-- Anahtar ile bir sonraki sayfayı alıyoruz SELECT * FROM Orders WHERE OrderID > @LastOrderID ORDER BY OrderID LIMIT 100;

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Proje: Pazar yeri, 5 yıl içinde yapılan sipariş veritabanı (50 milyon satır)

Hata: Eski kullanıcıların siparişlerini sayfalamak için OFFSET kullandılar. OFFSET > 1 milyon olan sorgular 30–60 saniye sürdü. Bu, raporlar ve API arayüzü üzerinde etki yarattı — bu nedenle sunucu CPU'su yüklendi ve kuyruktaki bekleme süresi arttı.



Hikaye

Proje: Kurumsal CRM, müşteri raporları.

Hata: Sayfalamada sıralama düzenini dikkate almadılar ve indeks kullanmadılar. Performans düştü ve seçimlerin bütünlüğü kontrolü bozuldu — kullanıcılar tablodaki değişikliklerde farklı sayfalarda aynı satırları aldı.



Hikaye

Proje: Finansal platform, göstergeler.

Hata: Karmaşık sayfalamalar, bağlama değişkenleri olmadan üretilen dinamik SQL üzerinden inşa edildi, bu da SQL enjeksiyonuna ve veri sayfaları arasında işlem dayanıklılığı sorunlarına yol açtı.