какую хеш-функцию выбрать для индексации строки uuid в mysql? md5 , crc64 или fnv - PullRequest
0 голосов
/ 15 апреля 2019

У меня в столбце хранится строка uuid.Я добавляю новый столбец для хранения целочисленного (64-битного) хеш-значения для индексации.какую хеш-функцию выбрать?

1. int(md5('a306d9cb-4d75-4673-ae43-700470692521').hexdigest()[-16:], 16)
2. crc64('a306d9cb-4d75-4673-ae43-700470692521')
3. fnv.hash('a306d9cb-4d75-4673-ae43-700470692521', bits=64)

это таблица сопоставления для сторонней учетной записи.

пример таблицы:

openid: o00HW1KP16EvXs5whqPH2qyx667s
appid: wxb25520ae9512cabb
uid: 135435123

(openid, appid) -> uid

используется для создания составного индекса (openid, appid).Можно ли сделать это быстрее, если добавить целочисленный столбец, такой как hash (openid, appid)?

1 Ответ

0 голосов
/ 15 апреля 2019

Нет необходимости хешировать UUID для его индексации. Вы можете сохранить UUID в CHAR (36) или преобразовать его в BINARY (16), чтобы сделать его более компактным. Вы можете создать индекс для столбца любого из этих типов данных.

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

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

...