Bunun fark yaratabileceği bir örnek, ardıl tetikleyicilere sahip tablolara satır sürüm bilgisi eklemekten kaçınan bir performans optimizasyonunu engelleyebilmesidir.
Bu, burada SQL Kiwi tarafından kapsanmaktadır
Depolanan verilerin gerçek boyutu önemsizdir - önemli olan potansiyel boyuttur.
Benzer şekilde, 2016'dan beri bellek için optimize edilmiş tablolar kullanılıyorsa, giriş sınırını potansiyel olarak aşabilecek, ancak bir ceza ile LOB sütunlarını veya sütun genişliği kombinasyonlarını kullanmak mümkün olmuştur.
(Maks.) Sütunlar her zaman satır dışında saklanır. Diğer sütunlar için, tablo tanımındaki veri satırı boyutu 8.060 baytı aşabilirse, SQL Server en büyük değişken uzunluklu sütunu / sütunları satır dışına iter. Yine, orada sakladığınız verilerin miktarına bağlı değildir.
Bunun bellek tüketimi ve performans üzerinde büyük bir olumsuz etkisi olabilir
Aşırı bildirimin sütun genişliklerinin büyük bir fark yaratabileceği bir başka durum, tablonun SSIS kullanılarak işlenip işlenmeyeceğidir. Değişken uzunluklu (BLOB olmayan) sütunlar için ayrılan bellek, bir yürütme ağacındaki her satır için sabittir ve bellek arabelleklerinin verimsiz kullanımına yol açabilecek şekilde sütunların beyan edilen maksimum uzunluğuna göre belirlenir (örnek) . SSIS paket geliştiricisi kaynaktan daha küçük bir sütun boyutu bildirebilirken, bu analiz en iyi şekilde önceden yapılır ve orada uygulanır.
SQL Server motorunun kendisine geri döndüğümüzde benzer bir durum, SORT
işlemler için ayırmak üzere bellek tahsisatını hesaplarken SQL Server'ın varchar(x)
sütunların ortalama olarak x/2
bayt tüketeceğini varsaymasıdır .
Senin en Eğer varchar
sütunlar bu yol açabilir bundan daha dolgun sort
döken operasyonlar tempdb
.
Sizin durumunuzda, varchar
sütunlarınız 8000
bayt olarak bildirilmişse, ancak gerçekte bundan çok daha az içeriğe sahipse, sorgunuza gerektirmeyen bellek tahsis edilecektir, bu açıkça verimsizdir ve bellek izinleri için beklemelere yol açabilir.
Bu, buradan indirilebilen SQL Workshops Webcast 1 Bölüm 2'de ele alınmıştır veya aşağıya bakınız.
use tempdb;
CREATE TABLE T(
id INT IDENTITY(1,1) PRIMARY KEY,
number int,
name8000 VARCHAR(8000),
name500 VARCHAR(500))
INSERT INTO T
(number,name8000,name500)
SELECT number, name, name
FROM master..spt_values
SELECT id,name500
FROM T
ORDER BY number
SELECT id,name8000
FROM T
ORDER BY number