Eğitimlerin arasında Oracle PL/SQL Advanced ve SQL Tuning de ekliyorum. İnanılmaz keyifli ve tune gibi çok detaylı sınıflandırmalar bunlar. Joinlerin bile nested loop, merge veya hash olmasına karar vermesini sağlıyorum, hintlere özgürlük veriyorum ve Oracle benim dediğimi yapacaksın diyorum. Çok keyifli bu optimizer ı yönetmek.

Şimdi Advanced PL/SQL kasıyorum, açıkçası yaratılan cursorlerin ref cursor olarak yaratıldığı zaman global olup tüm procedureler de çalıştığını bilmiyordum. Hatta bir procedure ile çağırılıp nerede kaldıysa diğer procedure çalıştığı an oradan devam etmesi çok orjinalmiş. Bunu kodları kasarken öğrendim. Uzun zaman olmuş paslanmışım.

Denemelerim:
14 milyon kayıt barındıran ve kendi kendini tekrar edip ekleyen bir customers2 tablosu yarattım. Bunu Sales tablosu ile işleştirince 234 milyon kayıt gibi absurt bir rakam çıkarttı.

Join 'i Nested Loop yap diyince sorgu sonucunu 1 saat 10 dk da getirdi.
Join'i Hash ve 2 Parallel lik verince 34 dk da getirdi.
Bunları yaparken autotrace i traceonly yaptığım için sadece Extension Plan gösterdi istatistikle beraber.

Sizlerle paylaşmak istedim.

SQL ler
Nested loop:
select /*+ use_nl(c) */ * from sh.customers2 c, sh.sales s
where c.cust_id = s.cust_id;

Parallel ve Hash:
select /*+ use_hash(c) parallel(2) */ * from sh.customers2 c, sh.sales s
where c.cust_id = s.cust_id;