Tarih Fonksiyonlarının Performansa Etkisi

Tarihsel veri tiplerinde ki dönüştürme işlemleri çoğu zaman performansı aşağı çeken noktalardır fakat hep gözden kaçan tarfta  onlar olur. Örneğin Cast ve Convert süreçlerinde ki performans farklarını inceleyeceğiz bu makalemde.

Evet iki side aynı işi gerçekleştiriyor fakat örneğimizin sonucunda iki si arasında query design ına ve kullanıldığı yere göre büyük farklar olabiliyor.

Convert Syntax :

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Cast Syntax :

CAST ( expression AS data_type [ ( length ) ] )

Şimdi örnek bir tablo oluşturup o tablo içerisine data basalım. (Aşağıda ki Query ile bu süreci gerçekleştirebilirsiniz.)

CREATE TABLE DatePerformance
    (
      Id INT IDENTITY
             PRIMARY KEY ,
      Descriptions CHAR(500) DEFAULT 'Yusuf Kahveci' ,
      DateColumn DATETIME,
    );


INSERT  INTO DatePerformance
        ( DateColumn
        )
        SELECT  DATEADD(MI, RAND() * 10000, GETDATE())
GO 100000

Yukarıda ki sürecimizi tamamladıktan sonra , oluşturmuş olduğumuz tablomuzda DateColumn kolonu üzerine aşağıda ki Index ‘i oluşturalım.

CREATE INDEX SQLNCIX_DataPerformance_DateColumn 
ON DatePerformance 
(
DateColumn);

Artık Demomuzu gerçekleştirebileceğimiz bir ortama sahibiz. Şimdi ise verimizi hem Convert fonksiyonunu hemde Cast fonksiyonunu kullanan iki ayrı Sorgu yazıp değerlerini incelememiz gerekiyor.

Query I :

-- SESSION I
SET STATISTICS IO ON;

DECLARE @SqlTr_Date DATETIME = '2016-07-15 16:38:49.490';

SELECT  DateColumn
FROM    DatePerformance
WHERE   CONVERT(VARCHAR, DateColumn, 112) = CONVERT(VARCHAR, @SqlTr_Date, 112);

SET STATISTICS IO OFF;

Query II :

SET STATISTICS IO ON;

DECLARE @SqlTr_Date DATETIME = '2016-07-15 16:38:49.490';
SELECT  DateColumn
FROM    DatePerformance
WHERE   CAST(DateColumn AS DATE) = CAST(@SqlTr_Date AS DATE);

SET STATISTICS IO OFF;

Yukarıda ki Query leri inceleiğimiz de SET STATISTICS IO ON ifadesini görmekteyiz. Bu ifade ile Query mizin IO değerlerini alıyoruz ki iki Query nin IO değerlerini karşılaştırarak Performance değerlendirmesi yapabilelim.

Aynı zamanda Query imizi Execute butonuna basmadan Actual Execution Plan butonuna da basarak Execution Planın da hazırlnaması sağlayalım ki Plan ları karşılaştırabilelim.

Query I ‘i EXEC ettiğimizde oluşan istatistik Değeri ve Execution Planını aşağıda görmekteyiz.

Q I – Istatistik :

(14392 row(s) affected)

Table ‘DatePerformance’. Scan count 1, logical reads 825, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

Q I – Execution Plan :

Query II ‘i  EXEC ettiğimiz de olulan istatistik Değeri ve Execution Planı aşağıda görmekteyiz.

 

Q II – Istatistik :

(14392 row(s) affected)

Table ‘DatePerformance’. Scan count 1, logical reads 56, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

Q II – Execution Plan :

Görüldüğü üzere CONVERT ve CAST fonksiyonları ile ayrı ayrı iki query yazdık ve performans değerlendirmesinde ciddi IO farkı ve Execution Plan farkı olduğunu gördük.

Artık tarih formatlama gibi süreçlerimizde dikkatli olmamız gerektiğini ve yüklü süreçlerde query design larmızda analiz ederek fonksiyon kullanmamızın çok önemli olduğunun farkındayız.

Kolay Gelsin.

Leave a Reply

Your email address will not be published. Required fields are marked *