Лучший способ обработки большого (UUID) в качестве первичного ключа таблицы MySQL
У меня есть строка UUID, которую я хочу использовать в качестве первичного ключа таблиц MySQL, UUID представляет собой шестнадцатеричную строку из 32 символов (после удаления символов "-"). В связи с тем, что в качестве первичного ключа в базе данных лучше использовать числовой столбец (int), я хотел бы преобразовать его в целое число, но не уверен в лучшем способе его обработки.
- Из-за размера строки (т. Е. uuid='a822ff2bff02461db45ddcd10a2de0c2'), нужно ли разбивать это на несколько "подстроки".
- В данный момент я использую PHP на 32-битной архитектуре, поэтому преобразование его в PHP не будет работать из-за размера PHP_INT_MAX (макс 0xFFFFFFFF). И я подозреваю, что это будет то же самое ограничение для MySQL.
- Мне не нравится идея нескольких первичных ключей в качестве решения этой проблемы, я бы предпочел использовать строковое представление, даже если это не самый предпочтительный метод.
Возможно, я думаю обо всем этом неправильно и не против чтения документации, так что приемлемыми были бы либо примеры, либо предлагаемое чтение в качестве ответа.
3 answers
В большинстве случаев лучше хранить идентификаторы UUID/GUID как BINARY(16)
. См. Эти связанные вопросы о стековом потоке:
Преобразование может (и, вероятно, должно) выполняться в MySQL вместо PHP, поэтому, используете ли вы 32-битный PHP-клиент или 64-битный, не имеет значения (каламбур: P)
Используйте строковый тип, а не целое число. Лучше будет только лучше, если это решит проблему.
Если вас действительно беспокоит скорость поиска, используйте синтетический (автоматически увеличивающийся) первичный ключ. Вы можете наложить уникальное ограничение на столбец UUID и использовать его только один раз для поиска синтетического ключа, который впоследствии будет использоваться для ваших соединений и т. Д.
Это также зависит от механизма хранения. ТокуДБ должен справиться со всеми этими проблемами.