Varchar boyutu geçici tablolarda önemli mi?


16

Eşimin çalışmalarında , saklı yordamlarda geçici tablolardaki varchar(255)tüm varcharalanlar için kullanılması hakkında bir tartışma var . Temel olarak, bir kamp 255'i kullanmak ister, çünkü tanım değişse bile her zaman çalışır ve diğer kamp potansiyel performans iyileştirmeleri için kaynak tablolarındaki büyüklükte kalmak ister.

Performans kampı doğru mu? Başka çıkarımlar var mı? SQL Server kullanıyorlar.


Öncelikle geçici masalara ihtiyacınız olmadığını iddia ediyorum. Ne için kullanılıyorlar? Gerekiyorsa, bu özel sütunlar ne için kullanılıyor? Herhangi bir türde birleşme veya karşılaştırmalarda kullanılıyorlar mı? Alttaki sütunlardan herhangi biri varvar değil nvarchar mı?
Aaron Bertrand

@AaronBertrand Geçici tablolar modülerlik için oradadır. Değişebilen iş kurallarına göre veriler birkaç kez dönüştürülür ve doldurulur. Karışımda da birkaç tane olduğunu düşünüyorum MAX().
Brian Nickel

Yanıtlar:


6

Geçici tablolarınızı nasıl kullandığınıza bağlı olarak, bir veri kesme sorunuyla karşılaşabilirsiniz.

Bu örnek biraz karışık, ama benim açımdan bunu gösteriyor. Misal:

  1. Kullanıcı tablosu sütununuz varchar (50) şeklindedir.
  2. Geçici tablo sütununuz varchar (255) şeklindedir.
  3. Kullanıcı tablonuzdaki bu sütunda 45 karakter içeren bir kaydınız var.
  4. Prosedürünüzde, bu geçici tabloyu kullanıcı tablonuzla birleştirmeden önce '- kazanma için' sütununu sonuna kadar birleştirirsiniz.

Temp tablosu, 59 uzunluğu ile yeni varchar değerini memnuniyetle kabul eder. Ancak, kullanıcı tablonuz kabul edemedi. Prosedürünüzde bunu nasıl ele aldığınıza bağlı olarak, bu kesilmeye veya bir hataya neden olabilir.

Bu sorunları belgeleyip hesaba katmadıkça, işleminiz beklenmedik bir şekilde gerçekleşebilir.

Şahsen, bu soruya% 100 doğru bir cevap olduğunu düşünmüyorum. Gerçekten bu geçici tabloları nasıl kullandığınıza bağlıdır.

Bu yardımcı olur umarım


0

saklı yordamlarda geçici tablolardaki varchar(255)tüm varcharalanlar için kullanma .

Gerçek alan uzunluğunun kullanımına doğru eğilirdim.

Son zamanlarda MySQL (SQL Server benzer olduğunu varsayıyorum) geçici tabloları her varcharsütun için mümkün olan maksimum uzunluğu depolamak için yeterli bellek ayırmak okumak ... varcharTüm alanlar için gerekli bellek% 200-500 ayırmak için sistematik bir yaklaşım saklı yordamlar, sistem kaynakları üzerinde gereksiz bir çekim gibi görünmektedir. Bu geçici tabloları oluşturmak için önemli miktarda bellek kullanıyorsanız, gereksiz yere önbellekleme için kullanılan belleği talep edebilir, mağaza prosedürleri yapıldıktan sonra bile gelecekte bir noktada sunucu için daha fazla iş oluşturabilirsiniz.

Düzenleme: Bill Karwin'in cevabına bakın: /programming/1962310/importance-of-varchar-length-in-mysql-table


2
SQL Server'ın benzer olduğunu var sayar mıyız? Yapmam ...
AK

Üzgünüm, cevabımın eksik olduğunu anlıyorum. Demek istediğim, bu varsayımın yanlış olduğu tespit edilmedikçe, dikkatli olursak (yani performansı olumsuz etkileyebilecek bir değişiklik yapmamak).
Matt
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.