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

Я уже видел похожую запись о переполнении стека, но не совсем удовлетворен.

Допустим, я предложить веб-службу. http://foo.com/SERVICEID

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

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

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

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

Спасибо.

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

31
задан Kenny Cason 23 August 2012 в 13:45
поделиться

1 ответ

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

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

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

45
ответ дан 27 November 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: