Хранение MySQL GUID/UUID

Это лучший способ, с помощью которого я мог бы преобразовать GUID/UUID MySQL, сгенерированный UUID() в двоичный файл (16):

UNHEX(REPLACE(UUID(),'-',''))

И затем сохраняя его в BINARY (16)

Есть ли какие-либо последствия для этого, о которых я должен знать?

Ответ 1

Не так много последствий. Это немного замедлит запросы, но вы вряд ли заметите это.

UNIQUEIDENTIFIER всегда сохраняется как 16-byte binary.

Если вы собираетесь загрузить двоичный файл в клиент и проанализируйте его там, отметьте bit order, он может иметь другое строковое представление, чем начальное NEWID().

Oracle SYS_GUID() функция подвержена этой проблеме, преобразование ее в строку дает разные результаты на клиенте и на сервере.

Ответ 2

Я бы поставил его в 8-байтовое целое и сохранил целое число с использованием высокоэффективного однонаправленного хэш-алгоритма с низким столкновением, такого как MurmurHash64A. Это использует намного меньше места и может быть проиндексировано и/или разделено на. Существует проект SourceForge, который включает функции MemCached для mySQL (http://forge.mysql.com/projects/project.php?id=250), которые могут включать MurmurHash64A, поскольку Memchached использует его, но я не знаю, Знаю. Или посмотрите на эту реализацию FNV для mySQL: http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/