Это просто случайное число, верно?Не шифрование.
Do not использовать префикс;хотя это несколько сократит размер индекса, во многих случаях это приведет к аннулированию использования индекса.Правда, 22 байта длиннее, чем строка из 8 символов или 4 байта INT
.Но обратная сторона отказа от использования индекса хуже.
Значение по умолчанию 16 (22) достаточно, чтобы случайная строка была достаточно уникальной, чтобы избежать случайных столкновений.
Не говорите VARCHAR(255)
, если максимальное значение равно 22. Скажите CHAR(22)
, если фиксированная длина, или VARCHAR(22)
, если вы разрешаете пользователю выбирать длину до 16.
Скажите CHARACTER SET ascii COLLATE ascii_bin
для столбца.Это позволит избежать (1) накладных расходов на utf8 и (2) ошибки сворачивания регистра.
Если у вас будет индекс для миллиарда этих элементов, тогда будут существенные проблемы с производительностью, как обсуждалось здесь (хотя и в другом контексте).Миллион строк, вероятно, не проблема - это зависит от того, когда индекс становится больше, чем может быть кэширован в ОЗУ в buffer_pool.
(Если я правильно помню формулу, для 8 символов, как вы описали,был бы один шанс в 300K, что индекс с записями в 300K будет содержать дубликат. Но это не проблема.)