Подтвердить что ты не робот

MySQL - использование String в качестве основного ключа

Я уже видел подобный пост в Stack Overflow, но был не совсем удовлетворен.

Скажем, я предлагаю веб-сервис. http://foo.com/SERVICEID

SERVICEID - уникальный идентификатор строки, используемый для ссылки на службу (базовая 64, нижняя/верхняя и нижняя + номера), аналогично тому, как службы сокращения URL-адресов генерируют идентификатор для URL-адреса.

Я понимаю, что существуют проблемы с производительностью при сравнении строк с целыми числами.

Но мне интересно, как максимально оптимизировать первичный ключ типа String.

Я использую MySQL (в настоящее время использую движок MyISAM, хотя я, по общему признанию, не понимаю все отличия двигателя).

Спасибо.

update для моей цели, строка была на самом деле всего целым числом, закодированным base62, поэтому первичный ключ был целым числом, и поскольку вы вряд ли когда-либо превысите размер bigint, он просто не делает слишком много смысла использовать что-либо еще (для моего конкретного случая использования)

4b9b3361

Ответ 1

Нет ничего плохого в использовании CHAR или VARCHAR в качестве первичного ключа.

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

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