SORU
28 Kasım 2011, PAZARTESİ


SQL için en iyi uygulamalar sütun uzunluğu varchar

length için en iyi değeri nedir. yeni bir SQL tablo veya varolan bir tablo için varchar yeni bir sütun eklemek her zaman, bir şeyi merak ediyorum:

Yani, hadi, bir sütun türü varchar name denir. Yani, uzunluğu seçmek zorundasınız. Yapamam ad ^ düşün . 20 karakter, ama hiç belli olmaz. Ama yerine, ben her zaman 2^n bir sonraki sayıya kadar yuvarlak kullanarak. Bu durumda, uzunluk olarak 32 seçerdim. Ben bunu, çünkü bir bilgisayar bilimcisi bakış açısı, Sayı 2^n çok daha iyi gibi görünüyor even benden başka numaralar ve ben sadece farz mimarisi altında yapabilir bu rakamlar biraz daha iyi diğerlerinden.

Öte yandan, örneğin MSSQL server, no sütun oluşturmak için seçtiğinizde 50, varsayılan uzunluğu değerini ayarlar. Bu konuda beni düşünmeye sevk ediyor. Neden 50? sadece rastgele bir sayı veya ortalama sütun uzunluğu, ya da neye dayanarak?

Ayrıca farklı SQL sunucuları uygulamaları - ya da belki - olabilir (MySQL, MSSQL, PostgreSQL gibi ...) farklı en iyi sütun uzunluğu değerleri var.

CEVAP
28 Kasım 2011, PAZARTESİ


Benim bildiğim hayır VERİTABANI "" 2^n uzunluğunda bir No max ile daha iyi bir performans sağlayacaktır. optimizasyon herhangi bir uzunluğu 2 olan bir güç değil.

Erken SQL Server sürümleri aslında uzunluğu 255 ile bir VARCHAR daha farklı, daha yüksek, uzunluğu bir tedavi düşünüyorum. Eğer hala bu durumda bilmiyorum.

Hemen hemen tüm VERİTABANI için gerekli olan gerçek depolama sadece bunu koymak karakter sayısı max tarafından belirlenir. uzunluğu tanımlayın. Görüş depolama noktası (ve büyük olasılıkla bir performans) ikilik(100) veya VACHAR(500) olarak bir sütun bildirmek olsun hiç fark etmez.

Max görmelisiniz. uzunluğu teknik/fiziksel bir şey yerine kısıtlama bir tür (veya iş kuralı) no sütun için sağlanan.

PostgreSQL için en iyi Kur uzunluğu bir kısıtlama olmadan text kullanma ve ne olursa olsun başka bir iş gerektirir karakter sayısını sınırlar CHECK CONSTRAINT.

Eğer bu şartı değişirse, onay kısıtlaması değiştirme tablo yeniden yazılmış olması gerekmez, çünkü () değiştirmekten çok daha hızlı

Aynı Oracle ve diğerleri için uygulanabilir - Oracle VARCHAR(4000) text yerine olurdu.

Eğer ikilik(max) ve örneğin ikilik(500) SQL Server depolama arasında fiziksel bir fark varsa bilmiyorum. Ama görünüşe göre 10* *göre varchar(max) kullanırken bir performans etkisi yoktur.

this link (bir yorum olarak Erwin Brandstetter tarafından yayınlanmıştır)

2013-09-22 düzenleyin

Bigown yorum ile ilgili:

Sütun tanımı 9.2 ilk cevap yazdığım zaman mevcut değildi) bir değişiklik daha önce sürümleri İsimyaptıbütün tablo, örneğin here bakın yeniden. 9.2 beri, bu artık bir durumdur ve hızlı bir test 1.2 milyon satır ile bir tablo için sütun sayısının artırılması gerçekten sadece 0,5 saniye sürdüğünü doğruladı.

Oracle için bu gerçek de, büyük bir masa varchar sütunu değiştirmek için gereken süreyi bakılırsa görünüyor. Ama bunun için herhangi bir referans bulamadım.

MySQL İçin the manual says "Çoğu durumda, ALTER TABLO orijinal tablonun geçici bir kopyasını oluşturur". Ve kendi testlerimi onaylayın: 1.2 milyon satır (PostgreSQL ile benim test olarak) bir sütun boyutunu artırmak için bir tablo üzerinde ALTER TABLE Bir çalışan 1.5 dakika sürdü. MySQL ancakdeğilkullan "seçeneği yararlı kullanmak için bir sütun. karakter sayısını sınırlamak için" geçici çözüm

SQL Server için bu konuda net bir açıklama bulamadım ama no sütun (tekrar yukarıdan 1.2 milyon satır tablo) boyutunu artırmak için yürütme zamanı gösterirhayıryeniden gerçekleşir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blendtec

    Blendtec

    30 EKİM 2006
  • Emotional Trancer

    Emotional Tr

    4 Mart 2010
  • World Science Festival

    World Scienc

    1 Mayıs 2008