SORU
4 Kasım 2008, Salı


Tüm metin tabanlı alanlar genel bir ikilik(255) kullanmanın dezavantajları var mı?

Ben bir contacts tablo içeren alanlar gibi postcode, first name, last name, town, country, phone number vb, hangi tanımlanan VARCHAR(255) olsa da hiçbiri bu alanlar sürekli gelip kapatmak zorunda 255 karakter. (Eğer merak ediyorsanız, göçler Raylar üzerinde Yakut varsayılan olarak VARCHAR(255) Dize alanları göster ve asla geçersiz kılmak için rahatsız çünkü bu şekilde).

Beri VARCHAR sadece mağaza sayısını gerçek karakter alanı ile birlikte alan uzunluğu), herhangi bir farklı avantajı (performans veya başka bir şekilde) kullanarak, diyelim ki, VARCHAR(16) VARCHAR(255)?

Ayrıca, bu alanların çoğu dizinler var. Sahada büyük no boyutunu dizin boyutu performansı etkiler?

BİLGİNİZE MySQL 5 kullanıyorum.

CEVAP
4 Kasım 2008, Salı


Depolama süresi saklamak için yeterince zeki olduğunu her zaman 255 karakter deposu olan belirli bir satır, CHAR(255) aksine ihtiyacım var.

Ama beri etiketlemiş bu soru ile MySQL, anlatacak bir MySQL özel ipucu: satır kopyalanmış depolama motoru için SQL katman katman, VARCHAR alanları dönüştürülür CHAR kazanç avantajı çalışma ile sabit genişlikli satır. Bellek dizeleri oluryastıklı maksimum uzunluğusizin ilan VARCHAR sütun.

Sorgunuza örtülü olarak geçici bir tablo oluşturur, örneğin sıralama yaparken ya da GROUP BY, Bu çok fazla bellek kullanabilir. Eğer o kadar uzun olmasına gerek yok, veriler için VARCHAR(255) alanları çok fazla kullanırsanız, bu geçici tablo çok büyük hale getirebilirsiniz.

Olabilir de. bu "doldurma" davranış anlamına gelen bir dize ilan ile utf8 karakter seti balataları için üç bayt başına karakter için bile dizeleri depolamak ile tek bayt) içerik (örneğin, ascıı veya latin1 karakter). Ve aynı şekilde utf8mb4 karakter kümesi dizesi dışında bellekte karakter başına dört bayt pad neden olur.

Yani bir VARCHAR(255) utf8 depolama kısa bir dize gibi "fikrim Yok" alır 11 bayt disk (on alt-karakter karakter, artı bir bayt uzunluk) ama alır 765 bayt cinsinden bellek, ve böylece geçici tablolar veya sıralama sonuçları.

Sık sık bilmeden 1.5 GB geçici tablolar yaratan MySQL kullanıcıları yardım ettim ve disk alanı doldurdu. Pratikte çok kısa dizeleri saklı VARCHAR(255) sütunları bir sürü vardı.

En iyi depolamak istediğiniz veri türüne göre sütun tanımlamak için. Diğer arkadaşlar belirttiğim gibi uygulama ile ilgili kısıtlamaları zorlamak için yararları vardır. Ama yukarıda anlattığım bellek israf önlemek için fiziksel yararları vardır.

Sabit uzun posta adresi birçok kişi kesinlikle herhangi bir adres daha uzun bir zamandır VARCHAR tercih ediliyor, tabii ki, ne diyeceğimi bilemiyorum. Ve 255 olan uzunluğu ile kodlanmış olabilir VARCHAR bir bayt olarak en fazla uzunluğu çünkü alışılmış. Ayrıca MySQL VARCHAR maksimum uzunluk 5. 0'dan büyük oldu.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • RyanXLT

    RyanXLT

    22 Ocak 2011