Мы рассматриваем возможность использования значений UUID в качестве первичных ключей для нашей базы данных MySQL. Вставляемые данные генерируются с десятков, сотен или даже тысяч удаленных компьютеров и вставляются со скоростью 100-40 000 вставок в секунду, и мы никогда не будем делать никаких обновлений.
Сама база данных обычно достигает около 50 миллионов записей, прежде чем мы начнем отбирать данные, так что это не массивная база данных, но и не маленькая. Мы также планируем работать на InnoDB, хотя мы готовы изменить это, если есть лучший движок для того, что мы делаем.
Мы были готовы использовать UUID Java Type 4, но во время тестирования наблюдали странное поведение. Во-первых, мы сохраняем как varchar (36), и теперь я понимаю, что нам было бы лучше использовать binary (16) - хотя насколько лучше, я не уверен.
Более важный вопрос: насколько сильно эти случайные данные портят индекс, когда у нас есть 50 миллионов записей? Было бы лучше, если бы мы использовали, например, UUID типа 1, где крайние левые биты были отмечены временем? Или, может быть, нам следует полностью отказаться от UUID и рассмотреть первичные ключи auto_increment?
Я ищу общие мысли / советы по производительности различных типов UUID, когда они хранятся как индекс / первичный ключ в MySQL. Благодаря!