SQL Server ile Verinin Sayfalanması ( SQL Server Paging)

By | February 7, 2017

Merhabalar,
Bugün sizlere verinin sayfalanması (paging ) işlemini SQL Server ile nasıl yapabileceğimizi göstereceğim. Bu konu ile ilgili olarak SQL Server 2012 ile hayatımıza girmiş yeni özellik olan OFFSET and FETCH bahsediyor olacağım.

SQL Server 2012 ile OFFSET and FETCH Özelliğinin kullanımı

  • İlk n kaydı hariç tutmak için genel sözdizimi aşağıdaki gibidir.

SELECT sutun-adlari FROM tabloadi ORDER BY sutun-adlari OFFSET n ROWS

  • İlk n kaydı hariç tutmak ve yalnızca sonraki m kayıtlarını getirmek için

SELECT sutun-adlari FROM tabloadi ORDER BY sutun-adlari OFSET n ROWS FETCH NEXT m ROWS ONLY

Yukarıdaki sorgunun çıktısı ise (n + 1) ila (n + 1 + m) arasında olan değerleri olacaktır.

Şimdi ise Offset – Fetch özelliğini kullanarak sayfalama işlemini nasıl yapabiliriz ona bakalım. Aşağıdaki sorgu ihtiyacımızı görecektir.

Yukarıdaki çıktıyı incelediğinizde declare ile iki tane değişken tanımlaması yaptığımı ve @PageNumber için 0 @pagesize için 10 değerlerini verdiğimi görüyorsunuz. Result tarafında ise verdiğim değerlere göre gelen ilk sayfa verileri görüyorsunuz. Eğer ki ben PageNumber değerini 0, PageSize değerini ise 20 yapsaydım result tarafında 0 ile 20 arasındaki ürünler gelecektir.

Pagesize değeri ekranda kaç adet veriyi göstereceğiniz bilgisi, pagenumber ise kaçıncı sayfanın verisi olduğunu sizlere gösteriyor olacaktır. Yani PageNumber’I = 2, PageSize’de 20 yaparsanız ProductID değeri 40 dan büyük olan 20 ürünü görüntülemiş olursunuz.

Buradaki PageNumber ve PageSize değerlerini Stored Procedure parametreleri olarak düşünecek olursanız artık uygulamalarınızda paging yapma tarafını sql server tarafında daha da hızlıca yapabiliyor olursunuz eğer ki sql server 2012 öncesi bir sürüm kullanıyorsanız işlem kümenizi sıralayıp operatorler ile ihtiyacınıza uygun sayfalama verilerini oluşturabilirsiniz.

 

3 thoughts on “SQL Server ile Verinin Sayfalanması ( SQL Server Paging)

  1. Emre

    Merhaba. Hocam kendi uygulamamda yapıya da uygun olduğu için OFSET ve FETCH deyimlerini kullanarak sayfalama yapıyorum. Ancak şöyle bir sıkıntı var. Yazdığım uzun bir SQL sorgusunu Server 2017 Express sürümde çalıştırdığımda 2 sn de sonuç geliyor ama Server 2017 Standart sürümde çalıştırdığımda 10 sn sürüyor. Aynı makine üzerinde 2 sql server sürümünü de kurdum denedim. Tüm şartlar aynı ama sql versiyonlarından kaynaklı bir sorun var. 2017 standart sürüm lisanslı orjinal ve onu kullanmak istiyorum ama bu sorunu bir türlü aşamadım. Tabloda toplam 68bin kayıt var. Sorgudan OFSET FETCH i kaldırınca 2 sunucuda da 3sn de cevap geliyor. Ama OFSET FETCH ekleyince bu sorun oluşuyor. Sizce sorunun kaynağı ne olabilir?

    Reply
    1. cozenc Post author

      Emre merhaba,

      Her iki ortam özelinde Index ve Disk konumları aynı mı?
      Örnek Express SSD de, Standart edition NAS Diskte olabilir mi?

      Reply
      1. Emre

        Herşey aynı. Aynı sunucuda (Windows server 2016) aynı yerlere birini kaldırıp diğerini kurarak bile denedim acaba sunucudan kaynaklı mı diye, hatta kurarken özellikleri de aynı kuruyorum. Hatta veritabanının yedeği var ve o yedeği restore ederek aynı veri tabanını kullanıyorum. Ama ilginç şekilde bu sonuçla karşılaşıyorum. elimde lisanslı server 2017 kurulum var ve kurarken Express, Developer ve standart sürümü kurma seçenekleri var. Aynı kurulum dosyasından 3 sürümü de denedim. Express te sorunsuz çalışıyor ama standart ve developer sürümünde bu durumla karşılaşıyorum. express kısıtlı olduğu için birşeyleri kontrol etmeden mi sorguyu çalıştırıyor diye düşündüm ama bulamadım.

        Reply

Leave a Reply

Your email address will not be published.