2012-01-20 10 views
10

ten jest kontynuacją mojego poprzedniego pytania: Blob and Storage RequirementMYSQL TINYBLOB vs LONGBLOB

Zrobiłem kilka testów przy użyciu SHOW TABLE STATUS, i okazało się, że całkowita ilość miejsca na dysku wykorzystywane faktycznie zależy wyłącznie od wielkości rzeczywistych plików przesłanych do bazy danych, a nie typu (np. TINYBLOB lub LONGBLOG) w kolumnie.

A więc, jeśli tak nie jest, to co robi różnica, gdy wybieramy jeden nad drugim typem BLOB?

Odpowiedz

21

Każdy rozmiar pola kropelkowego rezerwuje dodatkowe bajty, aby pomieścić informacje o rozmiarze. Longblob używa 4 + n bajtów pamięci, gdzie n jest rzeczywistym rozmiarem bloba, który przechowujesz. Jeśli przechowujesz tylko 10 bajtów danych typu blob, zużyjesz 14 bajtów przestrzeni.

Dla porównania, tinyblob używa 1 + n bajtów, więc twoje 10 bajtów zajmowałoby 11 bajtów przestrzeni, 3 bajtowe oszczędności.

3 bajty to niewiele, gdy mamy do czynienia tylko z kilkoma rekordami, ale ponieważ liczba rekordów DB rośnie, każdy zapisany bajt jest dobrą rzeczą.

+0

Dokładnie to, co chciałem wiedzieć. Zaakceptowany (cóż, właściwie to będę musiał poczekać 8 minut). – jombie

+6

Szybki dodatek do tej odpowiedzi: zapisane 3 bajty nie tylko oszczędzają miejsce na dysku. Wpływa także na to, ile mieści się w pamięci, w pamięciach podręcznych itp., Więc może mieć również wpływ na wydajność. –

+0

@MarcB, Czy Twoja odpowiedź odnosi się do silnika InnoDB lub silnika MyISAM? Czy masz źródło/cytat? – Pacerier