TRIM Fonksiyonlarının Performansa Etikisi

Sargability bölümünde ve Query Performance makalelerimde performance ın önemini ve neler kullanıp kullanmayacağımıza dair bilgileri paylaştım ve ara ara da o sayfaları güncelliyorum.

SQL Server SARGability Session I

SQL Server Query Performans İpuçları

Bu günde TRIM Function ın perfromansa olan etkisini göreceğiz. Aşağıda hazırladığım scriptler ile Demo üzerinden giderek daha net farkı gözlemlemenizi sağlayacağım.

Peki nedir LTRIM ve RTRIM fonksiyonları.

String bir veride, başındaki ve sonundaki boşlukları temizlemek diğer bir deyişle sağındaki ve solundaki boşlukları temizlemek için RTRIM ve LTRIM fonksiyonları kullanılır.

LTRIM : String bir verinin solundaki yanı başındaki boşlukları temizler.

RTRIM : String verinin sonundaki yani sağındaki boşlukları temizler.

Aşağıda ki Script bloğu ile sqlturkiye veritabanı içerisine demo tablomuzu oluşturup içerisine veri basalım.

USE SQLTURKIYE
GO
--Demo Tablomuzu Oluşturuyoruz...
CREATE TABLE sqltr_demo_17012018 (
	PId INT IDENTITY (1, 1) PRIMARY KEY CLUSTERED
   ,PName VARCHAR(100)
   ,PSurname VARCHAR(100)
   ,Email VARCHAR(150)
)
--Data Basım süreci...
DECLARE @i INT=0
WHILE @i<10000 BEGIN
INSERT INTO  sqltr_demo_17012018 (PName, PSurname, Email)
	VALUES ('Yusuf', 'Kahveci', '[email protected]');
	SET @[email protected]+1
END
GO
INSERT INTO  sqltr_demo_17012018 (PName, PSurname, Email)
	VALUES ('Yaşar', 'Kahveci', '[email protected]');
GO
DECLARE @i INT=0
WHILE @i<20000 BEGIN
INSERT INTO  sqltr_demo_17012018 (PName, PSurname, Email)
	VALUES ('Yusuf', 'Kahveci', '[email protected]');
	SET @[email protected]+1

-- Index Oluşturuyoruz...
CREATE INDEX SQLTR_IX_sqltrdemo ON sqltr_demo_17012018 (PName)
INCLUDE (Email)

Şimdi ise bu tablodan PNAme i ‘Yaşar’  olan çalışanın Email bilgisini alan düz bir SELECT yazalım ve ardından aynı SELECT i hem LTRIM hem de RTRIM li ,sonra diğer SELECT i sadece LTRIM li ve en son olarakta RTRIM li şekilde yazıp Execution Planlarına toplu bakalım.

 

SELECT sd.Email  FROM sqltr_demo_17012018 sd
WHERE sd.PName='Yaşar'
GO
SELECT sd.Email FROM sqltr_demo_17012018 sd
WHERE LTRIM(RTRIM(sd.PName))='Yaşar'
GO
SELECT sd.Email FROM sqltr_demo_17012018 sd
WHERE LTRIM(sd.PName)='Yaşar'
GO
SELECT sd.Email FROM sqltr_demo_17012018 sd
WHERE RTRIM(sd.PName)='Yaşar'
 

 

Gördüğünüz üzere WHERE bloğunda TRIM fonksiyonları kullandığımız tüm SELECT scriptlerimiz Index Scan yani tüm tabloyu taradıktan sonra dataya eriştiğini görmekteyiz. Fonksiyon kullanmadığımız SELECT cümleciği ise Index i kullandığını görmekteyiz.

 

Diğer makalelerde de altını çizerek söylediğim cümleyi tekrar ediyorum ve mümkün olmadıkça WHERE bloklarınızda fonksiyon kullanımından kaçınınız. 

 

Kolay Gelsin.

Leave a Reply

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