UserID против производительности имени пользователя в MySQL - PullRequest
0 голосов
/ 13 июля 2011

Лучше хранить целочисленный идентификатор пользователя или хранить имя пользователя в качестве ключа.

Что лучше для производительности?

Ответы [ 5 ]

3 голосов
/ 13 июля 2011

Вопросы больше похожи на обсуждение, потому что они действительно основаны на требованиях приложения.Однако я дам общий ответ, почему UserID лучше для производительности.

Мои 3 причины, почему UserID лучше для производительности:

  1. Может быть увеличен автоматически, сохраняя на одну поездку меньше в базу данныхпроверить, используется ли имя пользователя.
  2. Позволяет пользователям изменять имена пользователей
  3. Без знака INT тип данных требует только до 4 байта , что позволяет до 4294967295 уникальных идентификаторов

Мои 3 причины не использовать Имя пользователя:

  1. Хранилище, для использования кодировки UTF-8 потребуется 3 байта на символ или 1 байт на символ для чего-то вроде latin1
  2. Для максимальной скорости поиска вы должны использовать таблицу MyISAM с таблицами фиксированной ширины.Таблица фиксированной ширины на MyISAM дает вам 30% увеличение скорости поиска по сравнению с динамической таблицей.
  3. MyISAM выполняет блокировку на уровне таблицы, что может привести к снижению производительности на если таблица тяжелая write.
1 голос
/ 13 июля 2011

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

1 голос
/ 13 июля 2011

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

0 голосов
/ 13 июля 2011

В долгосрочной перспективе имена пользователей будут более сложными, чем автоматически увеличенное целое число Id. Возможно, вы не заметите большой разницы в производительности сравнений, которые выполняет MySql, но код вашего домена может выиграть от возможности сравнивать идентификационные номера, а не строки, содержащие имена пользователей.

Если вы хотите иметь возможность извлекать данные по имени пользователя с сопоставимой производительностью, но не делать имя пользователя первичным ключом, взгляните на индексирование MySQL

Вот хорошая статья по индексации.

0 голосов
/ 13 июля 2011

Ну, это зависит от того, чего вы пытаетесь достичь. В идеале большинство сайтов имеют как UserId, так и Username, и оба они должны быть уникальными. Когда вы назначаете UserID, вы можете автоматически увеличивать его, и это гарантирует, что каждая новая запись в таблице получит уникальный userID, и она сделает всю работу за вас. Тем не менее, я предполагаю, что вы не планируете, чтобы пользователи использовали userID в качестве средства для доступа к вашему веб-сайту, потому что это было бы просто плохим дизайном.

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