Gerektiğinden çok daha büyük sütun boyutu kullanma


16

Başka biriyle bir SQL Server veritabanı oluşturuyorum. Tablolardan biri, muhtemelen sabit kalacak verilerle küçüktür (6 satır). Uzaktan yeni bir satır eklenmesi olasılığı vardır. Tablo şöyle görünür:

CREATE TABLE someTable (
    id int primary key identity(1,1) not null,
    name varchar(128) not null unique
    );
INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here');

Bu namesütunun karakter uzunluğuna bakıyorum ve değerlerinin muhtemelen 32 karakterden, belki de 24'ten bile büyük olmayacağını düşünüyorum. Bu sütunu değiştirmenin herhangi bir avantajı var mı, örneğin, varchar(32)?

Ayrıca, varsayılan sütun boyutlarını 4, 8, 32 vb.'nin katlarına tutmanın bir avantajı var mı?

Yanıtlar:


15

SQL Server, sorgu işleme için bellek ayırırken sütun uzunluklarını kullanır. Yani, evet, kısacası, sütunları her zaman veriler için uygun şekilde boyutlandırmalısınız.

Bellek ayırmaları, sorgu tarafından döndürülen satır sayısını, bildirilen sütun uzunluğunun yarısı ile çarpmaktadır.

Bunu söyledikten sonra, 6 satırınız olduğunda, muhtemelen erken optimize etmek istemezsiniz. Bu tabloya milyonlarca satır içeren bir başkasına katılmazsanız, bir varchar (24) ve varchar (32), hatta varchar (128) arasında büyük bir fark olmayacaktır.

İkinci sorunuz, sütun katlarının ikili katlar halinde hizalanması hakkında soru sorar. SQL Server, her sütunun uzunluğuna bakılmaksızın tüm verileri 8KB sayfalarda depoladığından bu hiç gerekli değildir.


14

6 sıra ile, hayır, gözlemlenebilir bir fayda olmayacaktır. Bu tablonun tamamı tek bir sayfaya sığacak, böylece sayfanın tamamını kullanacağınız maksimum potansiyel alanı azaltacak ve sayfanın tamamını pratik anlamda gerçekten farklı olmayacak.

Daha büyük masalarda, doğru boyutlandırma çok önemlidir. Bunun nedeni, bellek tahminlerinin her bir değerin% 50 oranında olacağı varsayımına dayanmasıdır. Varchar (128) varsa, her değer gerçek veriden bağımsız olarak 64 bayt işgal etmeyi bekler, bu nedenle bellek hibeleri 64b * satır sayısı olacaktır. Tüm değerler 32 karakter veya daha az olacaksa, bir varchar (64) veya hatta varchar (32) yapmak muhtemelen daha iyi bir seçimdir. Değerlerin büyük bir yüzdesi başlığa yakınsa veya sınırdaysa, karakterin oynaklıktan çıkmasını bile talep edebilirsiniz.

Dize uzunluklarının 2 gücünde sınırlandırılmasının faydalarına gelince, bugünün donanımında kimsenin bariz avantajlar gösterebileceğini düşünmüyorum.

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.