SQL Server VARCHAR Sütun Genişliği


14

Web'de arama yaparken, aşırı geniş VARCHAR sütunlarını belirtirken performans etkisi olup olmadığı konusunda çelişkili tavsiyeler buldum, örneğin VARCHAR (30) muhtemelen ne zaman yapacağım.

Tüm satır 8060 baytı aşarsa, bir performans isabeti olduğuna dair sürekli anlaşıyorum. Bunun dışında anlaşmazlık görüyorum.

İddia doğru The default is SET ANSI PADDING ON = potential for lots of trailing spacesmu? Toplam satır genişliği 8060'tan az olduğu sürece, VARCHAR sütunlarının aşırı boyutlandırılmasında gerçek performans endişeleri var mı?

Sütun genişliğinin önemli olduğuna dair kanıt


The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need.

http://www.sql-server-performance.com/2007/datatypes/


  • Length is a constraint on the data (like CHECK, FK, NULL etc)
  • Performance when the row exceeds 8060 bytes
  • Can not have unique constraint or index (key column width must be < 900)
  • The default is SET ANSI PADDING ON = potential for lots of trailing spaces

Varchar (8000) kurmanın sonuçları nelerdir?


Sütun genişliğinin önemli olmadığının kanıtı


If you're talking about varchar and nvarchar then no, there is no penalty for allowing a higher field length.

/programming/7025996/overstating-field-size-in-database-design


The varchar datatype, by contrast, consumes only the amount of actual space used plus 2 bytes for overhead

http://sqlfool.com/content/PerformanceConsiderationsOfDataTypes.pdf


Yanıtlar:


7

Soru şu şekilde daha iyi ifade edilebilir:

"Değişken uzunlukta bir sütunun maksimum uzunluğunu fazla belirtmenin avantajı nedir?"

Genel olarak, çok az avantajı vardır ve çeşitli bağlantılı cevapların işaret ettiği gibi birkaç dezavantaj vardır. Diğer kaygıların yanı sıra, SQL Server'ın açık kaynaklı olmadığını düşünün: sisteme sağlanan bilgilere dayanarak uygulanan birçok 'sihirli sayı' ve sezgisel tarama vardır. Kaynak kod erişimi olmadan, bu uygulamanın etkisinin ne olabileceğinden asla tam olarak emin olamayız.

Gelen bazı durumlarda bir sütunun ortalama uzunluğu sıralama / karma bellek verir hesaplanırken% 50, SQL Server tarafından kabul çok daha yüksektir, maksimum uzunluğu aşırı belirterek bir performans artışı görebilirsiniz. Bu şüpheli bir çözümdür ve muhtemelen temel sütun tanımını değiştirmek yerine yalnızca açık CASTveya CONVERT(yorumlarla!) Uygulanmalıdır . Bazen, yine de tüm satırlar yerine anahtarları sıralamak için sorguyu yeniden yazmak tercih edilir .

Maksimum satır boyutu Nerede olabilir (hiçbir satır aslında yapmak bile) içinde satır sınırını aşan, silme satırlar beklenmedik neden olabilir sayfa bölme tetikleyici varsa. Güncellemeler aynı mekanizma yoluyla parçalanmaya da yol açabilir.

SQL Server, meta verilerden iyi ve doğru bilgiler sağlandığı çoğu durumda oldukça iyi bir iş çıkarır. Bu 'kolaylık' ilkesinden taviz vermek bana mantıksız geliyor. Mantıklı bir yaklaşım, saklanacak gerçek verilere ve öngörülebilir değişikliklere göre makul olan bir maksimum uzunluk değeri seçmektir .


-3

Belirttiğiniz gibi, satır boyutu 8060'ı (veya maksimum değer ne olursa olsun) aşmadıkça, VARCHAR (30) veya VARCHAR (255) veya daha büyük bir performans farkı yoktur. Bağlantılı makaleden CHAR ile VARCHAR karşılaştırması gerçekten uygun değildir. Gereksinim duyduğunuzdan daha fazla alan belirtmemeniz gerektiğini kabul etsem de, çoğu durumda gerçekte ne kadar alana ihtiyacınız olduğunu bilmiyorsunuz. VARCHAR alanı ile liberal olun - alanların boyutunu artırmak bir tablo yeniden oluşturma gerektirir eminim, azaltmak ise basit bir ALTER TABLE ifadesidir.


6
Değişken uzunlukta sütunların boyutunu artırma (artan haricinde basit meta veri değişikliğidir maxdan non max). Daha yüksek yüke sahip olan zıt yöndür.
Martin Smith
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.