ebuzer Öncelikle gerekli indeksleri attığınızdan emin olun.
Kendinize şu soruları sormanız gerekiyor:
- 100 bin kaydı gerçekten listelemem gerekiyor mu? Kullanıcı sayfa sayfa dolaşarak bir şeyler elde edecek mi?
- Aşağıda 1000 sayfa oluştu, bu kullanıcının ne işine yarayacak? Sayfa sayfa dakikalarca dolaşmak ya da bir anda 689'uncu sayfaya gitmek bir problemi çözüyor mu? Bir kolaylık sağlıyor mu?
Eğer bu sorulara "evet bir anlam ifade etmiyor" şeklinde cevap veriyorsanız simplePaginate kullanacaksınız. Eğer kayıtlar çok sık değişmiyorsa cursorPaginate en performanslı olanıdır. Ben şahsen paginate kullanmak için bir sebep görmüyorum. 100 bin kaydı kullanıcının önüne dökmenin bir anlamı yok.
Ben yine de sayfaları göstermek istiyorum, bir işe yaramasalar da güzel bir görüntü veriyorlar diyorsanız kayıtları listelemeyin, sadece filtreleme yaptırın. Yani liste boş gelsin, kullanıcı filtre yapsın ve o şekilde sonuçlara ulaşsın.
Diğer bir yol ise tablo parçalama. Mesela belli bir noktadan sonra eski kayıtlara erişim gerekmiyordur. Örneğin 1 ay önceki kayıtlara ya da durumu tamamlandı olan kayıtlara artık aktif olarak erişilmiyordur. Bu kayıtları artık ana tabloda tutmak gerekmiyor olabilir onları başka bir tabloya alabilirsiniz böylece aktif kullanın ana tablo şişmez ve rahat hızlı bir kullanım sağlar. Bazı veritabanları bunu kolay yoldan yapmanızı sağlıyor, table partitioning şeklinde araştırma yapabilirsiniz.
Diğer bir yol ise kendinize ait bir Query\Builder oluşturup getCountForPagination dönüşü için cache kullanan bir paginate yöntemi yazmak. count alma başlı başına bir performans problemi. Boş bir zamanımda bir örnek hazırlayabilirim. Macro ile de yapılabilir mi kontrol etmem lazım.