MySql UUID Byte Order - PullRequest
       6

MySql UUID Byte Order

0 голосов
/ 27 января 2019

У меня есть таблица MySql, в которой первичным ключом является столбец с автоинкрементом, а затем у меня также есть столбец binary(16) с уникальным индексом для хранения идентификаторов UUID.

У MySqlConnector есть опция подключения для GuidFormat, в которой я путаюсь между TimeSwapBinary16 и LittleEndianBinary16 в отношении того, какой из них будет лучшим выбором и почему.

Обеспечивает ли расположение байтов UUID в определенном порядке преимущества, когда речь идет об эффективности и производительности, таких как вставки, индексирование, выбор с помощью столбца binary(16) в предложении WHERE и т. Д.

Может кто-нибудь объяснить это?

1 Ответ

0 голосов
/ 27 января 2019

Существует общий принцип, согласно которому вставка новых значений в индекс в порядке возрастания приводит к умеренно более эффективному индексу.

Хотя формат UUID по умолчанию для MySQL включает байты, сгенерированные из метки времени, они не находятся в байтовой позиции в UUID, что позволяет ему соответствовать цели «вставить в порядке возрастания». В MySQL 8.0 они представили функцию UUID_TO_BIN(), которая имеет возможность переставлять байты так, чтобы при генерации значений UUID они упорядочивались по метке времени.

Параметр соединителя TimeSwapBinary16 использует этот параметр, поэтому он лучше для производительности вставки индекса.

Разница в производительности между неупорядоченными и упорядоченными UUID показана в подробных тестах в этом сообщении в блоге, если вам интересно: https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/

...