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

92

Zgodnie z definicją:

VARCHAR: zakres o długości od 1 do 255 znaków. Wartości VARCHAR są sortowane i porównywane bez uwzględniania wielkości liter, chyba że podano słowo kluczowe BINARY. x + 1 bajty
TINYBLOB, TINYTEXT: kolumna BLOB lub TEXT o maksymalnej długości 255 (2 ^ 8-1) znaków x + 1 bajt

Na tej podstawie tworzę następującą tabelę:

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

A może lepiej jest utworzyć varchar lub tinytext i dlaczego ?

Czy to samo dotyczy:

VARCHAR: zakres Długość wynosi> 255 znaków. Wartości VARCHAR są sortowane i porównywane bez uwzględniania wielkości liter, chyba że podano słowo kluczowe BINARY. x + 2 bajty
Kolumna BLOB, TEXT A BLOB lub TEXT o maksymalnej długości 65535 (2 ^ 16 - 1) znaków x + 2 bajty

Tech4Wilco
źródło
VARCHAR wymaga mniejszego narzutu pamięci, ale zwykle będą w pełni odczytywane w pamięci, więc na końcu VARCHAR może nadal używać więcej pamięci. Obie są różne. Używasz BLOBa do przechowywania danych binarnych, takich jak obraz, dźwięk i inne dane multimedialne. i VARCHAR do przechowywania tekstu o dowolnym rozmiarze do limitu.
Book Of Zeus

Odpowiedzi:

10

W tym przypadku varcharjest lepiej.

Zauważ, że varcharmoże to być od 1 do 65535 znaków.

Wartości w kolumnach VARCHAR to ciągi o zmiennej długości. Długość można określić jako wartość od 0 do 255 przed MySQL 5.0.3 oraz od 0 do 65 535 w 5.0.3 i nowszych wersjach. Efektywna maksymalna długość VARCHAR w MySQL 5.0.3 i nowszych jest zależna od maksymalnego rozmiaru wiersza (65 535 bajtów, który jest wspólny dla wszystkich kolumn) i używanego zestawu znaków. Zobacz Sekcja E.7.4, „Limity liczby kolumn i rozmiarów wierszy w tabeli”.

Obiekty BLOB są zapisywane w oddzielnej sekcji pliku.
Wymagają dodatkowego pliku do uwzględnienia w danych.
Z tego powodu varchar jest pobierany znacznie szybciej.

Jeśli masz duży obiekt BLOB, do którego rzadko uzyskujesz dostęp, bardziej sensowne jest użycie obiektu BLOB.
Przechowywanie danych BLOB w oddzielnym (części) pliku umożliwia zmniejszenie rozmiaru podstawowego pliku danych, a tym samym szybsze pobieranie.

Johan
źródło
To, czy jest to lepsze, zależy od wzorców dostępu do danych.
Michael Mior
1
Który to może być oddzielny plik?
glglgl
1
Obiekty BLOB nie są zapisywane w osobnym pliku. Ale są one przechowywane w innym fizycznym miejscu niż reszta kolumn.
Michael Mior
1
Należy pamiętać, że zależy to nie tylko od częstotliwości dostępu, ale także od operacji wykonywanych na danych. Na przykład każde zapytanie wymagające skanowania tabeli (które i tak jest generalnie złe), ale nie kolumna tekstu, zostanie pogorszone przez większą ilość skanowanych danych.
Michael Mior
1
Podejrzewam również, że sortowanie plików, które nie używa tej kolumny, może być bardziej wydajne, jeśli dane są przechowywane poza stroną, chociaż nie jestem pewien, czy optymalizator zapytań jest wystarczająco inteligentny, aby nie pobierać tych danych.
Michael Mior