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

Tüm Başlıklar XML

1.  Oracle içinde geçen bir terim.Türkçesi analitik fonksiyonlar.Oracle'nin güçlü olduğu bir diğer yön de bu.

Kullanım yerleri olarak
   * Kümülatif Toplamlar
   * Grup Bazlı Sorgular
   * Kümülatif Ortalamalar
şeklindeki sorguları daha hızlı ve kolay sürede yapılmasını sağlar.Analitik ile yapılabilen birçok sorgu normal sql ile yapılabilir ama performans açısından aralarında çok fark olduklarını unutmamak gerekir.

Bir tecrübemi aktarayım.İçinde milyonlar bazında veri tutan bir tablomuz vardı.Bu tablo üzerinden bir takım işlemler için algoritma çalıştırmamız gerekiyordu.Bunun için kullanılan sistemde 12 CPU bulunuyordu.Birçok yolu denedik.Analitik ile yaplılan çözümün en efektif olduğuna rakamları gördükten sonra karar verdik.Hani derler ya, bir şeyi yapmanın birçok yolu vardır.Ama bana inanınki bunlardan ancak biri en efektif olandır.

Şimdi size sonuç olarak aynı şeyi getiren iki sorgu örneği vermek istiyorum.Birinci yol normal yol:
SELECT ename,
       deptno,
       sal,
       (SELECT SUM(sal)
        FROM   scott.emp e2
        WHERE  e2.deptno < emp.deptno OR
               (e2.deptno = emp.deptno AND e2.ename <= emp.ename)) running_total,
       (SELECT SUM(sal)
        FROM   scott.emp e3
        WHERE  e3.deptno = emp.deptno AND
               e3.ename <= emp.ename) department_total,
       (SELECT COUNT(ename)
        FROM   scott.emp e3
        WHERE  e3.deptno = emp.deptno AND
               e3.ename <= emp.ename) seq
FROM   scott.emp emp
ORDER  BY deptno, ename

Bu ise analitik yöntem:
SELECT deptno,
       ename,
       sal,
       SUM(sal) over(PARTITION BY deptno ORDER BY sal, ename) cum_sal,
       round(100 * ratio_to_report(sal) over(PARTITION BY deptno), 1) pct_dept,
       round(100 * ratio_to_report(sal) over(), 1) pct_overall
FROM   scott.emp
ORDER  BY deptno, sal


Yukarıdaki sorgular aşağıdaki veri setini döndürür:
       DEPTNO    ENAME    SAL    CUM_SAL    PCT_DEPT    PCT_OVERALL
1    10    MILLER    1300,00    1300    14,9    4,5
2    10    CLARK    2450,00    3750    28    8,4
3    10    KING    5000,00    8750    57,1    17,2
4    20    SMITH    800,00    800    7,4    2,8
5    20    ADAMS    1100,00    1900    10,1    3,8
6    20    JONES    2975,00    4875    27,4    10,2
7    20    FORD    3000,00    7875    27,6    10,3
8    20    SCOTT    3000,00    10875    27,6    10,3
9    30    JAMES    950,00    950    10,1    3,3
10    30    MARTIN    1250,00    2200    13,3    4,3
11    30    WARD    1250,00    3450    13,3    4,3


Geçenlerde bir arkadaşın yapmış olduğu bir testi aktarayım:
Rows in table    CPU/analytics    CPU/generic    Difference
2000        0,05        2,13        42 times
4000        0,09        8,57         95 times
8000        0,19        35,88        188 times

mennan
07 Aralık 2005 23:58
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1046 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen