Лучший способ обработки большого (UUID) в качестве первичного ключа таблицы MySQL


У меня есть строка UUID, которую я хочу использовать в качестве первичного ключа таблиц MySQL, UUID представляет собой шестнадцатеричную строку из 32 символов (после удаления символов "-"). В связи с тем, что в качестве первичного ключа в базе данных лучше использовать числовой столбец (int), я хотел бы преобразовать его в целое число, но не уверен в лучшем способе его обработки.

  1. Из-за размера строки (т. Е. uuid='a822ff2bff02461db45ddcd10a2de0c2'), нужно ли разбивать это на несколько "подстроки".
  2. В данный момент я использую PHP на 32-битной архитектуре, поэтому преобразование его в PHP не будет работать из-за размера PHP_INT_MAX (макс 0xFFFFFFFF). И я подозреваю, что это будет то же самое ограничение для MySQL.
  3. Мне не нравится идея нескольких первичных ключей в качестве решения этой проблемы, я бы предпочел использовать строковое представление, даже если это не самый предпочтительный метод.

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

Author: Aaron Murray, 2013-04-20

3 answers

В большинстве случаев лучше хранить идентификаторы UUID/GUID как BINARY(16). См. Эти связанные вопросы о стековом потоке:

Преобразование может (и, вероятно, должно) выполняться в MySQL вместо PHP, поэтому, используете ли вы 32-битный PHP-клиент или 64-битный, не имеет значения (каламбур: P)

 26
Author: Hazzit, 2017-05-23 12:30:23

Используйте строковый тип, а не целое число. Лучше будет только лучше, если это решит проблему.

Если вас действительно беспокоит скорость поиска, используйте синтетический (автоматически увеличивающийся) первичный ключ. Вы можете наложить уникальное ограничение на столбец UUID и использовать его только один раз для поиска синтетического ключа, который впоследствии будет использоваться для ваших соединений и т. Д.

 1
Author: PaulProgrammer, 2013-04-20 17:04:45

Это также зависит от механизма хранения. ТокуДБ должен справиться со всеми этими проблемами.

 0
Author: giuseppe, 2015-03-02 15:28:16