База данных MySql design - длина varchar для полей utf8 :: 1. пароль 2. username 3.email - PullRequest
4 голосов
/ 11 июня 2010

В большинстве случаев я определяю длину varchar (255) автоматически.

Но теперь я думаю, какую длину varchar лучше определить для полей utf8 :

  1. пароль

  2. имя пользователя

  3. электронная почта

Если эти поля должны быть определены меньше, чем varchar 255, насколько производительность улучшится?

Спасибо

Ответы [ 3 ]

6 голосов
/ 11 июня 2010

«пароль» должен быть char (40), если вы используете хэши SHA1.Это может иметь двоичное сопоставление, если вы уверены, что случаи хеширования всегда одинаковы.Это дает вам лучшую производительность.Если нет, используйте latin1, но не используйте utf8.

'email' ... используйте 255, вы не можете знать, как долго чей-то адрес электронной почты.

Для имени пользователяЯ бы просто использовал вашу максимальную длину имени пользователя.20 или 30, вероятно, было бы хорошо.

Если у вас есть индекс для символьного поля (особенно если это часть PK), выбирайте длину очень тщательно, потому что более длинные и длинные индексы могут сильно снизить производительность (и увеличитьиспользование памяти).

Кроме того, если вы используете поле UTF8 char в индексе, вы должны знать, что MySQL резервирует в 3 раза больше байтов, чем фактическая длина символа поля, готовясь к худшему случаю (UTF8 может хранить определенныесимволы по 3 байта).Это также может привести к нехватке памяти.

2 голосов
/ 11 июня 2010

Если вы индексируете какое-либо из этих полей (и не используете префикс в качестве индекса), имейте в виду, что MySQL будет индексировать поле, как если бы оно было CHAR, а не VARCHAR, и каждая запись индекса будет использовать максимальное потенциальное пространство (таким образом, 3n байтов для VARCHAR(n), так как символ UTF8 может иметь длину до 3 байтов). Это может означать, что индекс будет больше, чем необходимо. Чтобы обойти это, уменьшите поле или внесите указатель в префикс.

(Я должен сказать: я уверен, что я читал, что это где-то в документации MySQL, но я не смог найти его, когда смотрел только сейчас.)

1 голос
/ 11 июня 2010

изменение, которое не окажет большого влияния на производительность (в зависимости от того, сколько строк в этой таблице - возможно, вы не заметите никакого эффекта), но, возможно, это приведет к тому, что ваша база данных будет использовать меньше дискового пространства. (Я использую длину 30 для имен пользователей, 64 для паролей (длина хэша) и 50 для адресов электронной почты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...