26 Şubat 2009 Perşembe

TRUNC() Performansı

Bazen select cümlesi yazarken "between" koşulunu kullanırız.
Eğer "between" ifadesi ile beraber tarih türünde field kullanıyorsak
genellikle TRUNC() fonksiyonu kullanmayı tercih ederiz.

IFS ekranlarını incelediğimizde bu konuyla ilgili, performans noktasında
önemli fark yaratan bir çözüm vardır.

Aşağıda aynı query inin 2 versiyonu gözükmektedir. İlki trunc() fonksiyonunu
kullanır ve 20 dk. kadar sürer. 2. versiyona cevap süresi 1 dk. ya iner.
Tabi bu süreler kayıt sayınıza bağlı değişecektir.

--- 1 ------- 20 dakika ---------------------
trunc(f.promised_delivery_date) BETWEEN xbegin_ AND xend_
--- 1 ------- 20 dakika---------------------

--- 2 ------- < 1 dakika ---------------------
f.promised_delivery_date BETWEEN xbegin_ AND xend_ + ( 1 - 1/ ( 60*60*24 ) )
--- 2 ------- < 1 dakika ---------------------

Bir başka değişle, TRUNC() eşitliğin solunda kullanılırsa
indeks kullanımını iptal eder.

..Önerilmez
****************************************
WHERE TRUNC(trans_date) = TRUNC(sysdate)

..Önerilir
****************************************
WHERE trans_date BETWEEN TRUNC(sysdate) AND
TRUNC(sysdate) + 0.99999

Hiç yorum yok:

Yorum Gönder