Я использую PostgreSQL в своем проекте. Столбец первичного ключа в моей таблице представляет собой тип символа длиной 36. Я генерирую направляющие в серверной части и сохраняю их в таблице. Нужно ли мне изменить тип столбца на uuid? Может ли он иметь такую же производительность?
«Я генерирую направляющие в серверной части и сохраняю их в таблице» Не имеет отношения к делу, но я предпочитаю выполнять работу, связанную с данными, с помощью инструментов обработки данных, а не наоборот — генерировать uuid в базе данных, а затем делать с ними все, что нужно делать в серверной части. .
UUID содержат 32 шестнадцатеричные цифры, которые при хранении сжимаются до 16 байт (2 шестнадцатеричные цифры на байт) и без дефисов (-). Однако не все строки символов могут составлять uuid. Действительный uuid должен соответствовать регулярному выражению <uuid column> ~ '^[0-9A-Fa-f\-]' или аналогичному выражению. Если ваш существующий объект удовлетворяет этому условию, обязательно используйте тип uuid. Что касается производительности, то она*, скорее всего, улучшится*, как и в противном случае.
Postgres может сгенерировать для вас UUID. Версии 13 и выше см. Функции UUID. Для версий 12 и более ранних сначала установите расширение uuid-ossp, а затем используйте функцию uuid_generate_v4().
Ответ на этот вопрос был дан ок. 20 веков назад в Древнем Риме - «Lex Specialis derogat legi Generali», т.е. частное правило заменяет (ущемляет) общее. Поэтому в настоящее время используют специализированный тип uuid (и его «правила»), а не общий text.





Храните UUID как тип данных uuid, а не как varchar или text. Это потребует больше места в оперативной памяти и на диске, будет медленнее обрабатываться и будет более подвержено ошибкам. Видеть:
uuid= 128-большое целое число, поэтому оно меньше, чем, например.VARCHAR(36). Я ожидаю небольшого положительного влияния на производительность (насколько это зависит от нескольких факторов) и уверен, что это не ухудшит производительность по сравнению с использованием текстового типа. Вывод: нет причин не использовать типuuid.