Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  Microsoft SqlServer ürününe 2005 versiyonuna yeni eklenene özelliklerden biriside ROW_NUMBER fonksiyonu. Böyle bir fonksiyonu geliştiriciler uzun süredir bekliyordu diye tahmin ediyorum. Özellikle sqlserver'ın sayfalı veri erişimi(paging) konusundaki zayıflığını azaltabilir bu fonksiyon. Yani bu fonksiyonu kullanarak yeni sayfalama yöntemleri geliştirilebilir.
kar
27 Ağustos 2006 14:05
2.  Oracle için bkz: rownum
bateristt
27 Ağustos 2006 16:25
3.  Oracle içinde kullanılan analitik fonksiyonlar dan biridir. Belirli bir veri bloğuna göre satır numaralarını 1 artırarak getiri. Bir diğer veri bloğu işlendiği kendini tekrar 1'e çeker.

Kullanım yerleri hayalgücünüz ile sınırlıdır. Bir çok karmaşık SQL sorgusu, ROW_NUMBER ile yapılabilir hale gelmiştir.
Aşağıdaki örneği inceleyebilirsiniz:
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as hr

SQL>
SQL> drop table rownumber_test;

Table dropped

SQL> create table rownumber_test( deptartment number, employee number, salary number );

Table created

SQL> INSERT INTO rownumber_test VALUES( 1, 200, 1200 );

1 row inserted

SQL> INSERT INTO rownumber_test VALUES( 1, 201, 1900 );

1 row inserted

SQL> INSERT INTO rownumber_test VALUES( 1, 202, 1900 );

1 row inserted

SQL> INSERT INTO rownumber_test VALUES( 2, 204, 1000 );

1 row inserted

SQL> INSERT INTO rownumber_test VALUES( 2, 205, 1400 );

1 row inserted

SQL> INSERT INTO rownumber_test VALUES( 3, 206, 1880 );

1 row inserted

SQL> commit;

Commit complete

SQL> SELECT * FROM rownumber_test;

DEPTARTMENT   EMPLOYEE     SALARY
----------- ---------- ----------
          1        200       1200
          1        201       1900
          1        202       1900
          2        204       1000
          2        205       1400
          3        206       1880

6 rows selected

SQL> SELECT rt.*, row_number() over(partition by rt.deptartment order by rt.salary DESC) FROM rownumber_test rt;

DEPTARTMENT   EMPLOYEE     SALARY ROW_NUMBER()OVER(PARTITIONBYRT
----------- ---------- ---------- ------------------------------
          1        202       1900                              1
          1        201       1900                              2
          1        200       1200                              3
          2        205       1400                              1
          2        204       1000                              2
          3        206       1880                              1

6 rows selected

SQL> SELECT t.* FROM (SELECT rt.*, row_number() over(partition by rt.deptartment order by rt.salary DESC) rn FROM rownumber_test rt ) t WHERE t.rn = 1;

DEPTARTMENT   EMPLOYEE     SALARY         RN
----------- ---------- ---------- ----------
          1        201       1900          1
          2        205       1400          1
          3        206       1880          1

SQL>

mennan
19 Ekim 2006 15:21
4.  Denememizdeki MuhasebeHareketi tablosu 650.000 kayıtlı bir tablodur ve index siz bir nvarchar alanına göre order'lı çalışmayı tercih ettik.

WITH mh AS
(SELECT *, ROW_NUMBER() OVER ( order by Aciklama Desc) as RowNumber
FROM MuhasebeHareketi )
SELECT RowNumber, *
FROM mh
WHERE RowNumber between 20000 and 20100


SELECT *, ROW_NUMBER() OVER ( order by Aciklama Desc) as RowNumber
FROM MuhasebeHareketi

Yukarıdaki select tek başına çalıştırıldığında 42 saniye sürmektedir.

fakat ilk şekli ile çalıştırıldığında 5 sn sürmektedir.
Buda bize row_number'ın hedef kümeyi 1'den n'e kadar numaralamadığını ve hedef kümenin hepsine direk select atmadığını gösteriyor.

Sonuç olarak row_number, with ile birlikte Performansı ciddi bir şekilde artırıyor...
Ya da biz mi yanılıyoruz?
haydar
19 Ekim 2006 22:37
5.  Öncelikle bkz. with
Sonra bkz. Oracle için paging teknikleri
İki sorgunun da execution plan lerine bakarak, her ikisinin de table access full yaptıklarını görebilirsiniz.
mennan
20 Ekim 2006 00:13
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1125 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen