2011-09-06 13 views
21

Jakie są niedogodności związane z używaniem pola o długim formacie MySQL, gdy każdy wpis będzie pasował do pola o średnim rozmiarze?Jaka jest wada polegająca na użyciu pola o długim formacie MySQL, gdy każdy wpis mieści się w polu o średnim rozmiarze?

Powodem, dla którego pytam, jest to, że mam kilka pól o dużym rozmiarze i niedawno uświadomiłem sobie, że są one zbyt duże, ale potem zmagałem się z motywowaniem siebie, aby dokonać drobnej zmiany, ponieważ "co to za szkoda?" stąd pytanie.

Odpowiedz

29

Jedyna różnica wielkości pamięci jest liczba bajtów przeznaczonych na „ile bajtów jest to pole” numer. Z fine manual:

TINYTEXT L + 1 bytes, where L < 2^8 
TEXT  L + 2 bytes, where L < 2^16 
MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGTEXT L + 4 bytes, where L < 2^32 

Więc longtext użyje jednego bajta więcej niż mediumtext przechowywać ten sam tekst. Jest trochę więcej informacji w sekcji Data Type Storage Requirements instrukcji i trochę więcej w sekcji The BLOB and TEXT Types.

Nie ma praktycznej różnicy między czterema typami TEXT.

+3

Tak właśnie się założyłem. Jedyną różnicą byłoby użycie 1 dodatkowego bajtu przestrzeni na wiersz. Czy to jest poprawne? Jeśli tak, to nie mogę sobie wyobrazić, dlaczego istnieją jakieś opcje pól inne niż longtext? – darkAsPitch

+2

@darkAsPitch: AFAIK 1 dodatkowy bajt to jedyna różnica. Prawdopodobnie istnieją cztery typy z przyczyn historycznych. –

2

Mysql często używa tabel tymczasowych do wykonywania zapytań. Wadą posiadania dużego pola jest to, że MySql zarezerwuje tyle miejsca na kolumnę.

Trzeba będzie powolne wykonanie z tych samych danych, jeśli masz tę kolumnę oznaczoną na longtext porównać do MEDIUMTEXT

+1

Ale typy średniego i dłuższego tekstu MySQL mają zmienną długość, jedyną różnicą między nimi jest liczba bajtów przydzielonych dla rozmiaru kolumny. –

+0

Jeśli wewnętrzna tabela tymczasowa jest początkowo tworzona jako tabela w pamięci, ale staje się zbyt duża, MySQL automatycznie konwertuje ją do tabeli na dysku. http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html – Jerem

+3

LONGTEXT to 4 GB. Czy Mysql rezerwuje 4 GB miejsca (na wiersz) w tabelach tymczasowych, gdy w kwerendzie jest włączona kolumna LONGTEXT? Wydaje się to nieskuteczne, gdy w grę wchodzi więcej niż kilka wierszy. – sandinmyjoints

Powiązane problemy