VARCHAR(MAX)/NVARCHAR(MAX)
Sütunlar kullanıldığında verilerin sıra dışına kaydedildiğini biliyorum ...
Aslında, bu large value types out of row
seçenek kullanılarak ayarlanabilen seçeneğin ayarına bağlıdır sp_tableoption
. Gönderen belgeler :
Varsayılan içindir MAX
değerler saklanmasına içinde satır onlar uyarlarsa, 8000 bayt kadar. Eğer kullanmış sürece sp_tableoption
varsayılan değiştirmek için, sizin MAX
veri büyük olasılıkla içinde satır saklanacaktır.
Bununla birlikte, MAX
asla 8000 baytı aşmayacak değerler için veri türlerini kullanmak zayıf bir uygulamadır - bunun yerine MAX olmayan bir tür kullanın. MAX
SQL Server'ın 2GB'a kadar olabilecek verilerle başa çıkmaya hazır olması gerektiğinden, başka bir şey dışında, türlerle uğraşırken performans genellikle önemli ölçüde daha kötüdür .
Her alan satır dışında mı saklanıyor yoksa yalnızca maksimum alan mı?
Sadece MAX
olanlar. Ayrıca, daha önce satır içi bir MAX
sütun satır dışına taşınırsa, yalnızca bu satırdaki sütun etkilenir. Satır, satır dışı LOB
yapıya bir işaretçi ile değiştirilir . MAX olmayan sütunların satır dışına taşınabileceği durumlar da vardır.
Tablonun kümelenmiş dizinini tüm kaydı okumak için kullanıyorsanız, satır dışında depolanan alanlar da okunuyor mu?
Kümelenmiş dizinin taranması yalnızca satır içi verileri geçer. Sorgu için satır dışı veri gerekiyorsa, satır içi işaretçisi kullanılarak aranır.