CHAR () или VARCHAR () в качестве первичного ключа в таблице ISAM MySQL? - PullRequest
6 голосов
/ 03 октября 2008

Мне нужна простая таблица с полем имени пользователя и пароля в MySQL. Поскольку имена пользователей должны быть уникальными, для меня имеет смысл сделать их первичным ключом.

Лучше использовать CHAR() или VARCHAR() в качестве первичного ключа?

Ответы [ 4 ]

9 голосов
/ 03 октября 2008

может также просто использовать индекс идентификатора пользователя, это намного быстрее для объединений против char / varchar. две секунды, которые требуется, чтобы добавить, что теперь может сэкономить вам много времени позже, если вам случайно придется расширить функциональность вашей схемы.

некоторые подводные камни для размышления:

  • скажем, мы добавим несколько таблиц в будущем, что если кто-то захочет изменить имя пользователя?
  • говорят, что приложение более успешное, чем мы думаем, и мы должны взглянуть на оптимизацию. Вы действительно хотите повторить свою схему на этом этапе, чтобы уменьшить издержки индекса varchar?
5 голосов
/ 03 октября 2008

Я бы усердно работал, чтобы НЕ использовать CHAR () или VARCHAR () в качестве PK, а вместо этого использовать int с auto_increment. Это позволяет вам использовать этот user_id в дочерних таблицах, если это необходимо, и запросы на ПК должны выполняться быстрее. Если вам нужно использовать либо CHAR (), либо VARCHAR (), я бы использовал CHAR (), так как это фиксированная ширина.

Я не уверен на 100%, как MySQL работает с VARCHAR (), но большинству движков баз данных приходится делать что-то магическое, чтобы помочь движку узнать, где заканчиваются поля VARCHAR () и где начинается следующее поле, CHAR () делает это прямо вперед и мешает двигателю думать слишком много.

1 голос
/ 03 октября 2008

[Я бы усердно работал, чтобы НЕ использовать CHAR () или VARCHAR () в качестве PK, а вместо этого использовать int с auto_increment.] + 1

Установите уникальное ограничение имени пользователя, но используйте поле int в качестве PK

0 голосов
/ 03 октября 2008

Я не вижу, чтобы CHAR часто использовался в базах данных MySQL, над которыми я работал. Я бы пошел с VARCHAR

Например, для CHAR (30) все 30 символов хранятся в таблице, что означает, что каждая запись будет занимать одинаковое пространство, даже если ваше имя пользователя имеет длину всего 10 символов.

Используя VARCHAR (30), он будет использовать только достаточно места для хранения введенной вами строки.

На маленьком столе это не будет иметь большого значения, но на большом столе VARCHAR должен в целом поддерживать его меньшим.

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