SQL Server 2008'de varchar kullanımının hızlı etkisi


9

Eskiden, kullanan varcharaşırı charberi büyük bir hayır hayır oldu varcharsıranın geri kalanından farklı bir sayfaya saklandı. Bugün hala SQL Server 2008 için geçerli mi? 1-3 varchar(5)sütunu char(5)bir tablodaki sütunlara değiştirirken herhangi bir bellek / performans kazancı görecek miyim

a) 2.000.000 satır diyelim b) varcharsütunlardan herhangi biri dizinlerin / birincil anahtarların parçasıysa


2
Olası soru kopyası Çok uzun alanlar (varchar / nvarchar) performansı ve disk kullanımını nasıl etkiler? (MSSQL Server 2008) . Bunun bir kopya olmadığını düşünüyorsanız, kesinlikle orada bazı cevaplar bulacaksınız.
Marian

Yanıtlar:


8

Metin / varchar (maks.) (LOB türleri) varchar (n) / char (n) ile karıştırıyorsunuz

Aksi takdirde, varchar (1000) değil char (1000) kullanırsanız ve ortalama veri uzunluğu, örneğin 42, bu kötü bir tasarım ve çok fazla boşa giden alan.


DB2 ve bazı diğer DB motorları char ve varchar farklı saklandı ve DB2 için bazı tavsiyeler SQL Server'a aktarıldı.
Andrew Bickerton

@Andrew Bickerton: Yine bir efsane ...
gbn

beni efsanenin çürütüldüğü yöne yönlendirebilir misin? (Tavsiyenin SQL Server için geçerli olmadığını kabul ediyorum)
Andrew Bickerton

Ayrıca, DB2'nin orijinal sürümlerinden birine atıfta bulunuyorum (muhtemelen son 10 yılda bu şekilde olmadı), SQL 2000'deki tavsiyeye benzer şekilde, performans sorunları hala etrafta olduğu için PK'ların kümelenmemiş olması gerekir - gerçi artık gerçek değil
Andrew Bickerton

@Andrew Bickerton: SQL Server'ın disk yapılarına bakın (benden birkaç SO yanıtı) stackoverflow.com/search?q=user%3A27535+anatomy . Geç cevap
verdiğim

3

Şemanız hakkında daha fazla bilgi sahibi olmadan belirli performans kazançlarını veya isabetlerini anlatmak zordur, ancak genel olarak veri türünü verilerinizle eşleşecek şekilde tanımlamak istersiniz. Sabit bir genişliğe ihtiyacınız varsa (örneğin, her zaman beş karakteriniz olacağını biliyorsunuz), char (5) kullanmanız gerekir. Değişken miktarda verileriniz varsa varchar (5) kullanmalısınız.

SQL için bir sayfaya ne kadar çok veri sığarsanız performansınız da o kadar iyi olur.


3

Bildiğim kadarıyla SQL Server hiçbir zaman satır dışında varchar veya nvarchar veri türleri depolamamıştır. Metin ve NText farklıdır. Değişken genişlik sütunu için saklanan fazladan birkaç bit var, ama hepsi bu kadar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.