Grid için Veritabanı Üzerinde Sayfalama(Paging)
Herhangi bir veriyi veritabanı üzerinden çekip grid üzerinde göstermek ve grid üzerinde sayfalama yapmak yüksek sayıda satır içeren gridler için yazılımın performans kaybına uğramasına sebep olur. Bu tip bir gösterim veritabanından tüm verilerin çekilip network üzerinden grid üzerine gelir, grid göstereceği veriyi filtreleyerek ekrana getirir. Küçük satır sayısındaki veriler için bu performans kaybı hissedilmesede çok büyük datalarla çalışan programlarda (crm,erp,banka yazılımları) gridin her bind(data bağlama) işleminde (sayfa geçişlerinde, sayfa yüklenmesinde) bu performans kaybı hissedilecektir. Bu tip yapılarda çekilecek veriler için filtreleme işlemleri veritabanı üzerinde yapılırsa ve her bir bind işleminde gösterilmeyecek verinin veritabanı üzerinden alınmaması performans üzerinde çok olumlu etki edecektir. Bu tarz bir mimariyi bu makalede tasarlayacağız.
Veritabanı üzerinde dummy veriler için bir tablo oluşturup, daha sonra bu verileri çekebilmek için bir stored procedure oluşturalım.
CREATE
[mekanlar] [nchar]
[id] [int]
)
END
CREATE PROCEDURE [dbo].[GET_YER]
(
@PAGE_COUNT
AS
ROW_NUMBER
MEKANLAR
[yer]
WHERE
SAY
GO
Stored Prosedür iki tane parametre almaktadır. Bunlar @PAGE_NO ve @PAGE_COUNT değerleridir. Bu değerler gridin hangi sayfayı kullanıcılara göstereceği bilgisi(@PAGE_NO ) ve gridini herbir sayfasında toplam kaç tane kayıdın olduğu bilgisidir(PAGE_COUNT ). Bu iki değer sayesinde stored prosedür sayfa üzerinde gösterilecek olan veriyi filtreleme işlemi yapar. Prosedür içerisinde iç içe iki select işlemi vardır. Birinci select işleminde COUNT(*) OVER() TOTAL ile select ile toplam çekilen satır sayısını, ROW_NUMBER() OVER(ORDER BY MEKANLAR)AS SAY ile satır satır sıralı olarak her bir satırın numarasını çekeriz. Dış taraftaki select işlemi ile grid için gerekli olan veri aralığını SAY BETWEEN ((@PAGE_NO-1)*@PAGE_COUNT)+1 AND @PAGE_NO*@PAGE_COUNT kısıtı ile çeker.
Prosedürümüzü nasıl çalıştığını daha dikkatli inceleyelim. Burada ilk değer sayfa numarası ikinci değer ise istenilen satır sayısıdır.
[GET_YER] 1,5
[GET_YER] 2,5
[GET_YER] 3,5