У вас есть несколько вариантов:
- Сохраните его как VARCHAR (36), как вы уже предложили. Это займет 36 байтов (288 бит) памяти на UUID, не считая служебных данных.
- Сохранять каждый UUID в двух столбцах BIGINT, один для младших разрядов и один для старших разрядов; используйте UUID # getLeastSignificantBits () и UUID # getMostSignificantBits () , чтобы захватить каждую часть и сохранить ее соответствующим образом. Это займет 128 бит памяти на UUID, не считая каких-либо накладных расходов.
- Хранить каждый UUID как ОБЪЕКТ; это сохраняет его как двоичную сериализованную версию класса UUID. Я понятия не имею, сколько места это занимает; Мне нужно было выполнить тест, чтобы увидеть, что такое сериализованная форма Java UUID по умолчанию.
Достоинства и недостатки каждого подхода основаны на том, как вы передаете UUID вокруг своего приложения - если вы передаете их в виде их строковых эквивалентов, то недостаток в том, чтобы удвоить емкость хранилища для VARCHAR (36) подход, вероятно, перевешивается тем, что нет необходимости конвертировать их каждый раз, когда вы выполняете запрос или обновление БД. Если вы передаете их как родные UUID, то метод BIGINT, вероятно, требует довольно много накладных расходов.
О, и это приятно, что вы рассматриваете вопросы скорости и места для хранения, но, как сказали многие лучше меня, также хорошо, что вы понимаете, что они не могут быть критически важными, учитывая объем данных вашего приложения. будет хранить и поддерживать. Как всегда, микрооптимизация ради производительности важна только в том случае, если это не приводит к неприемлемым затратам или производительности. В противном случае эти две проблемы - пространство хранения UUID и время, необходимое для их обслуживания и запроса в БД, - имеют относительно низкое значение, учитывая дешевую стоимость хранения и способность индексов БД сделать вашу жизнь намного легче. :)