SQL Server – Veri Türü Dönüşümleri – Performans Karşılaştırması
SQL Server‘da tablo oluşturduğunuzda, değişken ve parametre tanımladığınızda, bu nesnelere ;metin,sayı,tarih,para vb. hangi tür verilerin saklanacağını belirtmemiz gerekiyor. Verilerin saklanacağı formata veri türü diyoruz. SQL Server veya başka bir veritabanı yönetim sisteminde saklayacağımız veri türünün doğru olarak belirlenmesi ve saklanması performans açısından ciddi önem arz etmektedir.
Bazı durumlarda saklanan veriyi kullanırken farklı bir veri türüne dönüştürme ihtiyacımız olabilir. SQL Server’da tür dönüşümü için üç farklı dönüşüm metodunu kullanabiliriz. Bunlar “CAST,CONVERT ve PARSE” metodlarıdır. Neden bir tane tür dönüşüm metodu yerine birden çok tür dönüşüm metodu olduğunu sorgulayabilirsiniz. Bu üç tür dönüşüm metodununda temelde aynı işlemi yapmalarına rağmen her biri farklı amaçlar doğrultusunda kullanabileceğimiz ek özellikler barındırmaktadır.
Birden çok tür dönüşüm metodu olduğu için iyi bir veritabanı yöneticisi hangi tür dönüşüm metodunu ne zaman kullanması gerektiğini iyi bilmelidir. Temel tür dönüşümlerini ve biribirlerine karşı performans karşılaştırmalarını inceleyerek ihtiyacımız olan en uygun tür dönüşüm metodunu tercih edebileceğiz. Örnekleri gerçekleştirmeden önce üç tür dönüşümlerinin yazım şekline bakalım.
CAST
CAST tür dönüşüm metodu ANSI SQL-92 uyumlu olup bir veri türünü başka bir veri türüne dönüştürmek için kullanılır. CAST tür dönüşüm metodu ANSI SQL standartında olduğu için ANSI SQL destekli diğer veritabanı yönetim sistemlerinde de “ORACLE, MYSQL, DB2” vb. kullanımı desteklenmektedir. CAST tür dönüşüm metodunun yazım yöntemi aşağıdaki gibidir;
[sql]
CAST ( dönüştürülecek_veri AS dönüştürülecek_veri_türü )
[/sql]
CONVERT
Convert tür dönüşüm metodu ANSI destekli olmayıp bir veri türünü başka bir veri türüne dönüştürmek için kullanılır. CONVERT tür dönüşüm metodu CAST ile aynı işlevi yapmasına karşın, dönüşüm sırasında farklı stiller vermemize olanak sağlamaktadır. Örneğin; Dönüşüm yaptığınız bir tarih formatının sadece saat bilgisinin alınmasını,tarih formatının dönüşüm sonucu farklı formatlar şeklinde gösterilmesini Convert tür dönüşüm metodu ile sağlayabilirsiniz. Convert tür dönüşüm metodunun yazım yöntemi aşağıdaki gibidir;
[sql]
CONVERT ( dönüştürülecek_Veri_Türü, dönüştürülecek_veri, [ dönüşüm_sonrası_uygulanacak_stil ] )
[/sql]
PARSE
Parse tür dönüşüm metodu temel olarak CAST ve CONVERT tür dönüşüm metodlarının yaptığı işlemi yerine getirmek yani bir veri türünü başka bir veri türüne dönüştürmek için kullanılır. PARSE tür dönüşüm metodu ek olarak tür dönüşüm sonrası gelen yeni türe bir kültür uygulamak için kullanılır. Örneğin; bir sayıyı para birimine dönüştürmek istediğinizde aynı zamanda kültür bilgisi vererek dönüşüm sonrası para biriminin türü “TL,Euro,Dolar vb.” formatlanabilir. Yine bir tarih verisini dönüştürdüğünüz kültüre göre “Almanya,İngiltere,Japonya” vb. tarih ve saat formatlarında görüntüleyebilirsiniz. Parse tür dönüşüm metodunun kullanım şekli aşağıdaki gibidir;
[sql]
PARSE (dönüştürülecek_veri AS dönüştürülecek_Veri_Türü [ USING dönüştürülmek_istenen_kültür ] )
[/sql]
Performans Karşılaştırmaları
Bu üç tür dönüşüm metodunun üzerinden geçmiş olduk sırada temel tür dönüşümünde hangi tür dönüşüm metodu daha performanslı onu inceleyelim. Tür dönüşüm metodlarının performans karşılaştırmalarını incelemek için aşağıdaki sorgu ile yeni bir tablo oluşturuyorum.
[sql]
CREATE TABLE [dbo].[Persons](
[PersonId] [int] IDENTITY(1,1) NOT NULL,
[PersonName] [varchar](50) NULL,
[TCKN] [varchar](11) NULL,
[CreatedDate] [varchar](20) NULL)
ON [PRIMARY]
[/sql]
Boş bir tablo oluşturduktan sonra bu tabloya 100000 kayıt ekliyorum.
[sql]
INSERT INTO Persons (PersonName,TCKN,CreatedDate) VALUES
(‘Mesut Güneş – Mesutx.com’,’123456789′,’2017-10-11 09:25:00′)
GO 100000
[/sql]
Tablomuzu oluşturup, kayıtlarımızı tabloya işledikten sonra VARCHAR veri türündeki bir alanı temel tür dönüşümü kullanarak INT veri türüne dönüştürelim. Dönüşüm sonrası hangi dönüşüm metodunun ne kadar zaman sürdüğünü öğrenmek için sorgularımızın başına aşağıdaki komutu eklemeliyiz.
[sql]
SET STATISTICS TIME ON
[/sql]
Varchar veri türüne sahip 100 bin kayıtlı bir kolonu INT veri türüne dönüştürüyoruz. Temel dönüşüm sonrası gözüken sürelerden de anlaşılacağı üzere CAST ve Convert tür dönüşüm metodları en az zamanı alırken, Parse tür dönüşüm metodu çok fazla zaman alıp diğer tür dönüşüm metodlarına göre 2.5 kat daha fazla zaman harcıyor.
Varchar veri türünü INT veri türüne dönüşüm sonrası performans sonuçlarını yukarıdaki görüntüden öğrenmiş olduk. Peki varchar veri türünü decimal veri türünde dönüştürdüğümüzde sonuçlar nasıl olacak?
Varchar veri türünden Decimal veri türüne dönüşüm sonrası da performans sıralaması değişmedi. Son olarak Varchar veri türündeki bir alanı DateTime veri türüne dönüştürelim.
Üç tür dönüşüm metodunu kullanarak varchar bir veriyi datetime veri türüne dönüştürdüğümüzde aradaki performans farkının ciddi bir şekilde Parse tür düşünüm metodunda arttığını görüyoruz. Performans karşılaştırmalarının sonucunda eğer herhangi bir formatlama veya kültür formatı kullanılmayacaksa kesinlikle CAST veri türü dönüşüm metodunu kullanmamız gerektiğini performans karşılaştırmasında görüyoruz.
Faydalı olması dileğiyle…