Я уже видел похожую запись о переполнении стека, но не совсем удовлетворен.
Допустим, я предложить веб-службу. http://foo.com/SERVICEID
SERVICEID - это уникальный идентификатор строки, используемый для ссылки на службу (основание 64, строчные / прописные + числа), аналогично тому, как службы сокращения URL генерируют идентификаторы для URL.
Я понимаю, что существуют проблемы с производительностью при сравнении строк с целыми числами.
Но мне любопытно, как максимально оптимизировать первичный ключ типа String.
Я использую MySQL, (в настоящее время использую движок MyISAM, хотя я, правда, не понимаю всех различий в движке).
Спасибо.
Обновите для моей цели строка на самом деле была просто целым числом, закодированным в base62, поэтому первичный ключ был целым числом, и, поскольку вы вряд ли когда-либо превысите размер bigint, просто не имеет особого смысла использовать что-нибудь еще (для моего конкретного случая использования)
Нет ничего плохого в использовании CHAR или VARCHAR в качестве первичного ключа.
Конечно, во многих случаях он будет занимать немного больше места, чем INT, но во многих случаях он является наиболее логичным выбором и может даже уменьшить количество необходимых столбцов, повышая эффективность, избегая необходимости иметь отдельное поле идентификатора.
Например, коды стран или аббревиатуры штатов уже имеют стандартизованные символьные коды, и это было бы хорошей причиной для использования символьного первичного ключа вместо того, чтобы составлять произвольный целочисленный идентификатор для каждого дополнительно.