SQL Server’da Varchar ve Varchar(MAX) Veri Tipleri Arasındaki Farklar

SQL Server'da Varchar ve Varchar(MAX) Veri Tipleri Arasındaki Farklar

Herkese merhaba,

Bu başlık altında SQL Server’da Varchar ve Varchar (MAX) veri tipleri arasındaki farkları inceleyeceğiz.

Varchar(MAX), Sql Server 2005 ile gelmiştir. Varchar(MAX) veri tipi, Text veri tipine göre birçok avantajı vardır.

Varchar[(n)]

Temel Tanım

Unicode olmayan değişken uzunluk karakter veri tipi.
Örnek:

DECLARE @Ad VARCHAR(50)
= 'yavuzselim'
SELECT @Ad

Depolama Kapasitesi

Maksimum 8000 Unicode olmayan karakteri depolayabilir (Diğer bir deyişle, maksimum depolama kapasitesi 8000 byte depolama alanıdır). İsteğe bağlı parametre 1 ile 8000 arasındadır.

Index?

Varchar veri tipi ile sütun üzerinde index oluşturabilirsiniz.
Örnek:

CREATE TABLE dbo.Calisanlar
(id INT identity(1,1)
PRIMARY KEY,
CalisanAd VARCHAR(50))
GO
CREATE INDEX IX_CalisanAdi
ON dbo.Calisanlar
(CalisanAd)
GO

Veriler Fiziksel Olarak Nasıl Saklanır?

Verileri depolamak için normal veri sayfalarını kullanır. Satırlarda değer saklar.

Her Karakter için Gerekli Byte Sayısı

Her karakter için 1 bayt kaplar.
Örnek:

DECLARE @Ad VARCHAR(50)
='Yavuz Selim'
SELECT @Ad Ad,
DATALENGTH(@Ad) Uzunluk) Length

Sonuç:
Ad Uzunluk
Yavuz Selim 11

Hangisini Kullanmalıyım?

Sütun veya değişkende depolanacak verilerin 8000 karakterden düşük olacağını biliyorsak, bu veri tipini kullanabiliriz. Örneğin Adı, Soyadı vb. için sütun değerleri maksimum 8000 karakter sınırını geçemeyen bu alanlar için bu veri tipini kullanmak daha iyidir.

Performans

Varchar [(n)] ve Varchar (Max) arasında
pek fazla performans farkı yoktur.
Varchar [(n)], Varchar (Max) ile karşılaştırıldığında daha iyi performans
sonuçları sağlar.
Sütun veya değişkende depolanacak
verilerin 8000 karakterden daha az olacağını
biliyorsak, bu Varchar [(n)]
veri türünü kullanmak Varchar (Max) ile karşılaştırıldığında daha iyi performans
sağlayacaktır.
Örnek: Aşağıdaki @Ad değişkeni
Varchar (Max) olarak değiştirildiğinde
1 milyon dönüş için Varchar (50) olarak
veri türünü kullandığımız veri tipine
göre iki kat daha fazla zaman harcıyor.

DECLARE @Ad VARCHAR(50), @Sayac INT=0,
@Baslama DATETIME = GETDATE()
WHILE(@Sayac < 1000000)
BEGIN
SELECT @Ad = 'Yavuz Selim', @Sayac = @Sayac +1
END
SELECT DATEDIFF(ms,@Baslama,GETDATE()) 'Bu kadar zaman aldı'
GO 6

Not : Burada GO 6 deyimi, yukarıdaki
ifadeleri 6 kez yürütür.

Varchar(Max)

Temel Tanım

Unicode olmayan büyük değişken uzunluk karakter veri tipi.
Örnek:

DECLARE @Ad VARCHAR(Max)
= 'Yavuz Selim Kart'
SELECT @Ad

Depolama Kapasitesi

En fazla 2 147 483 647 Unicode olmayan karakterleri saklayabilir (Maksimum depolama kapasitesi: 2GB).

Index?

Varchar(MAX) veri tipi sütun üzerinde index oluşturamazsınız.
Örnek:

CREATE TABLE dbo.Calisanlar
(id INT
identity(1,1)
PRIMARY KEY,
CalisanAdi VARCHAR(Max))
GO
CREATE INDEX IX_CalisanAdlari
ON dbo.Calisanlar
(CalisanAdi)
GO

Hata Mesajı:
Msg 1919, Level 16, State 1, Line 1 Column ‘Name’ in table ‘dbo.Employee’ is of a type that is invalid for use as a key column in an index.

Veriler Fiziksel Olarak Nasıl Saklanır?

Değerleri satırlarda saklar ve veri sayfalarını kullanır eğer bir taşma var ise Text veri tipinde saklanır ve bir pointer içeriğin yerini alır.

Her Karakter için Gerekli Byte Sayısı

Her karakter için 1 bayt kaplar.
Örnek:

DECLARE @Ad VARCHAR(MAX)
='Yavuz Selim Kart'
SELECT @Ad Ad,
DATALENGTH(@Ad) Uzunluk) Length

Sonuç:
Ad Uzunluk
Yavuz Selim Kart 16

Hangisini Kullanmalıyım?

Sütun veya değişkende saklanacak verilerin 8KB veri sayfasını geçebileceğini biliyorsak, bu veri tipini kullanabiliriz.

Performans

Varchar [(n)] ve Varchar (Max) arasında
pek fazla performans farkı yoktur.
Varchar [(n)], Varchar (Max) ile karşılaştırıldığında daha iyi performans
sonuçları sağlar.
Sütun veya değişkende depolanacak
verilerin 8000 karakterden daha az olacağını
biliyorsak, bu Varchar [(n)]
veri türünü kullanmak Varchar (Max) ile karşılaştırıldığında daha iyi performans
sağlayacaktır.
Örnek: Aşağıdaki @Ad değişkeni
Varchar (Max) olarak değiştirildiğinde
1 milyon dönüş için Varchar (50) olarak
veri türünü kullandığımız veri tipine
göre iki kat daha fazla zaman harcıyor.

DECLARE @Ad VARCHAR(50), @Sayac INT=0,
@Baslama DATETIME = GETDATE()
WHILE(@Sayac < 1000000)
BEGIN
SELECT @Ad = 'Yavuz Selim', @Sayac = @Sayac +1
END
SELECT DATEDIFF(ms,@Baslama,GETDATE()) 'Bu kadar zaman aldı'
GO 6

Not : Burada GO 6 deyimi, yukarıdaki
ifadeleri 6 kez yürütür.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

SQL Server tarafında kendini ilerletmeye çalışırken bildiklerini sürekli başkalarına aktaran, yazılım dünyasında (C#, Java, Python vb.) kendini güncel tutmaya çalışan, araştırma yapmaktan bıkmayan, meraklı, bilginin üzerine bilgi katmaktan mutluluk duyan bir yazılım eğitmeni ve kod sever. – Grafik tasarım dünyasında Indesign’ı anlatacak kadar iyi kullanabilen, Photoshop ve Illustrator’e de orta düzey hakimiyeti bulunan, internet üzerinde online kimya dergisi kurmuş ve bunu yüzbinlerce kişiye ulaştırmayı başaran bir grafik sever. -WordPress tarafında 5 adet web sitesi kurmuş, bu sistemler üzerine çalışan bir WordPress sever. -Sosyal medya üzerinde okumalara ve araştırmalara devam eden, kendi kurmuş olduğu kimya dergisini daha çok kişiye nasıl ulaştırırım diye düşünen ve bu konuda SEO çalışmaları üzerine kafa yoran bir Sosyal Medya sever. Kısaca çok çalışmayı seven, azimli biriyim.

Yazıyı Oylayın

0/50 ratings

Yazıyı Paylaşın

SQL Server Eğitimleri Kanalına Abone Olun

İlişkili Yazılar

Kimler Neler Demiş?

avatar
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
  Subscribe  
Bildir