CONVERT_IMPLICIT

Merhaba Sevgili Arkadaşlar ,

Bugün sizlere SQL SERVER da Execution Plan larımızı incelerken karşılaştığımız performans sorunlarımızından bahsedeceğim …

 

Çoğu zaman karşılaştığımız CONVERT_IMPLICIT  problemini nasıl ve ne şekilde aşarız bunu göreceğiz.

Şimdi adım adım örneğimiz üzerinden size aktaralım .

İlk önce bir adet test DB ‘si oluşturalım ..

CREATE DATABASE [SQL_TÜRKİYE];
GO

Daha sonra bu DB ‘mizin içerisine Test Tablosu oluşturalım .

USE [SQL_TÜRKİYE];
GO
CREATE TABLE [SQL_TÜRKİYE_TEST]
    (
      Id INT IDENTITY(1, 1) ,
      NAME VARCHAR(70) ,
      SURNAME VARCHAR(150) ,
      PHONE_NUMBER CHAR(11)
    );

Test tablomuzuda oluşturduktan sonra içerisine bir kaç veri basalım ;

INSERT  INTO [SQL_TÜRKİYE_TEST]
VALUES  ( 'Yusuf', 'KAHVECİ', '05300000000' ) 
             ,
        ( 'Yaşar', 'KAHVECİ', '05310000000' );

Veri basma işlemi bittikten sonra tablomuza Select çekelim …

USE [SQL_TÜRKİYE];	
GO							     
SELECT  *
FROM    [SQL_TÜRKİYE_TEST];

Bu işlemden sonra aşağıda ki ekran görüntüsünde de gördüğünüz üzere tablomuz sağlıklı bir şekilde oluşturulmuş ve istediğimiz veriler içerisinde yer almaktadır.

11111111

 

Şimdi ise bir adet SP_ yazacağım. SP_ ‘min amacı telefon numarasını girdiğimde o telefon numarası kimlere ait onu bulan bir sp_ olacak.

CREATE PROCEDURE [dbo].[Rehber]
    (
      @PhoneNumber NVARCHAR(50)
    )
AS
    SELECT  Name ,
            SurName
    FROM    SQL_TÜRKİYE_TEST
    WHERE   PHONE_NUMBER = @PhoneNumber;

Yukarıda oluşturduğumuz prosedürümüzü çalıştıralım .

EXEC Rehber '05300000000';

Sonuç aşağıda ki gibidir ..

22222222

 

Şimdi ise Execution Planını inceleyelim SP_ ‘mizin …

3333333

 

Yukarıda da gördüğümüz gibi Plan ‘ımızda CONVERT_IMPLICIT ile karşılaşmaktayız . Bu durumda bu satırı incelediğimizde PHONE_NUMBER kolonumuz ile buraya gönderdiğimiz değişkenimiz arasında bir uyuşmazlık olduğunu görmekteyiz.

Hemen sp_ ‘mizi açıp inceleyelim ve problemi çözmeye çalışalım .

44444

 

Yukarıda ki ekran da da görüldüğü üzere PHONE_NUMBER kolonumuzun Data Type ‘ı CHAR (11) iken @PhoneNumber değişkenimizin Data Type ‘ı Nvarchar(50) olarak tanımlanmış.  Bu sorunu gidermek için değişkenimizin data type ‘ını kolonumuzunki ile aynı yapalım ve öyle deniyelim ;

 

55555

 

Execution Planımıza baktığımızda CONVERT_IMPLICIT uyarısı almamaktayız …

UYARI : CONVERT_IMPLICIT ‘lere dikkat etmeliyiz. Yüklü işlemlerimizde çok büyük performans problemi yaşatabilmektedir.

İyi Çalışmalar.

Leave a Reply

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