varchar (255) vs tinytext / tinyblob ve varchar (65535) vs blob / text


92

Tanım olarak:

VARCHAR: Uzunluk aralığı 1 ila 255 karakterdir. VARCHAR değerleri, BINARY anahtar kelimesi verilmediği sürece büyük / küçük harfe duyarlı olmayacak şekilde sıralanır ve karşılaştırılır. x + 1 bayt
TINYBLOB, TINYTEXT: Maksimum 255 (2 ^ 8 - 1) karakter x + 1 bayt uzunluğunda bir BLOB veya TEXT sütunu

Buna dayanarak, aşağıdaki tabloyu oluşturuyorum:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Yoksa bir varchar veya tinytext oluşturmak daha mı iyidir ve neden ?

Aynı şey mi:

VARCHAR: Uzunluk aralığı> 255 karakterdir. VARCHAR değerleri, BINARY anahtar kelimesi verilmediği sürece büyük / küçük harfe duyarlı olmayacak şekilde sıralanır ve karşılaştırılır. x + 2 bayt
BLOB, TEXT A BLOB veya maksimum 65535 (2 ^ 16-1) karakter uzunluğunda TEXT sütunu x + 2 bayt


VARCHAR daha az bellek ek yüküne ihtiyaç duyar, ancak bunlar genellikle tam olarak bellekte okunur, bu nedenle sonunda VARCHAR daha fazla bellek kullanabilir. İkisi de farklı. Görüntü, ses ve diğer multimedya verileri gibi ikili verileri depolamak için BLOB'u kullanırsınız. ve VARCHAR ile sınıra kadar her boyuttaki metni saklayabilirsiniz.
Book Of Zeus

Yanıtlar:


10

Bu durumda varchardaha iyidir.

varchar1 ile 65535 karakter arasında olabileceğini unutmayın .

VARCHAR sütunlarındaki değerler, değişken uzunluklu dizelerdir. Uzunluk, MySQL 5.0.3'ten önce 0 ile 255 arasında ve 5.0.3 ve sonraki sürümlerde 0 ile 65.535 arasında bir değer olarak belirtilebilir. MySQL 5.0.3 ve sonraki sürümlerde bir VARCHAR'ın etkin maksimum uzunluğu, maksimum satır boyutuna (tüm sütunlar arasında paylaşılan 65.535 bayt) ve kullanılan karakter kümesine tabidir. Bkz. Bölüm E.7.4, "Tablo Sütun Sayısı ve Satır Boyutu Sınırları".

Bloblar dosyanın ayrı bir bölümüne kaydedilir.
Verilere dahil etmek için fazladan bir dosya okuması gerektirirler.
Bu nedenle varchar çok daha hızlı getirilir.

Seyrek olarak eriştiğiniz büyük bir blobunuz varsa, bir blob daha mantıklıdır.
Blob verilerini ayrı bir (parçası) dosyada saklamak, çekirdek veri dosyanızın daha küçük olmasını ve böylece daha hızlı alınmasını sağlar.


Bunun daha iyi olup olmadığı, veri erişim modelinize bağlıdır.
Michael Mior

1
Bu hangi ayrı dosya olabilir?
glglgl

1
Bloblar ayrı bir dosyaya kaydedilmez. Ancak, sütunların geri kalanından ayrı bir fiziksel konumda saklanırlar.
Michael Mior

1
Bunun yalnızca erişim sıklığına bağlı olmadığını, aynı zamanda veriler üzerinde hangi işlemlerin yapıldığına da bağlı olduğunu unutmayın. Örneğin, bir tablo taraması gerektiren (zaten genellikle kötüdür), ancak metin sütunu gerektirmeyen herhangi bir sorgu, taranan daha büyük veri hacmi nedeniyle daha kötü hale gelecektir.
Michael Mior

1
Ayrıca, sorgu iyileştiricisinin bu verileri çekmeyecek kadar akıllı olduğundan emin olmasam da, veriler sayfa dışında depolanırsa, bu sütunu kullanmayan dosyaların daha verimli olabileceğinden şüpheleniyorum.
Michael Mior
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.