Pytanie Który jest bardziej wydajny dla ciągu jedno lub dwuliterowego: CHAR (2) lub VARCHAR (2)?


Naprawdę szybki - czy bardziej wydajne jest przechowywanie danych, które mogą być jednym lub dwoma znakami jako CHAR (2) lub VARCHAR (2) w MySql?

Dzięki!


13
2018-04-13 17:33


pochodzenie


Te dwa typy danych nie są równoważne. Czy zastanawiasz się, która z metod jest bardziej wydajna do przechowywania dokładnie 2-znakowych ciągów znaków? - Matthew


Odpowiedzi:


Jeśli chodzi o ilość miejsca do przechowywania, lepiej mieć CHAR (2), ponieważ typ VARCHAR (2) będzie wymagał jednego dodatkowego bajtu do przechowywania długości:

Wartość CHAR (2) Wymagana pamięć masowa VARCHAR (2)
'' '' 2 bajty '' 1 bajt
'a' 'a' 2 bajty 'a' 2 bajty
"ab" "ab" 2 bajty "ab" 3 bajty

Widzieć 10.4.1. Typy CHAR i VARCHAR po więcej szczegółów.

Więcej informacji: Jaka jest różnica między VARCHAR i CHAR?


19
2018-04-13 17:38



+1 dla tabeli - reggie


Pod względem przestrzeni, CHAR (2) jest lepszy. Zobacz: http://dev.mysql.com/doc/refman/5.0/en/char.html

Gdybyś miał dłużej CHAR (100) vs VARCHAR (100), co jest lepsze w wykorzystaniu miejsca, zależy od posiadanych danych.

W każdym razie, jeśli chodzi o efektywność zapytań, zawsze dobrym pomysłem jest posiadanie rekordów o stałej długości, kiedy możesz sobie na nie pozwolić (DB może zoptymalizować lepiej dla kolumn o stałej długości).

Więc CHAR (2) wygląda na zwycięstwo nad VARCHAR (2) pod względem czasu i przestrzeni.


4
2018-04-13 17:38





Chciałbym jednak zapytać, czy wartość wydajności między varchar i char warto? Wygląda na to, że jakikolwiek wzrost wydajności byłby w najlepszym przypadku znikomy.


0
2018-04-13 17:44



Jest to raczej komentarz niż odpowiedź ... co do tego, czy robi jakąś różnicę, zależy od przypadku użycia. Przy długości 2, w przypadku VARCHAR2 jest 50% narzut na przechowywanie na pole. Jeśli istnieje duża liczba podobnych pól i wierszy, zacznie szybko się sumować. - forsvarir


W magazynie, VARCHAR(255) jest wystarczająco inteligentny, aby przechowywać tylko długość, której potrzebujesz w danym wierszu, w przeciwieństwie do CHAR(255) które zawsze będzie przechowywać 255 znaków.


0
2018-04-13 17:46