MySql UUID 字节顺序

MySql UUID Byte Order

我有一个 MySql table ,其中主键是一个自增列,然后我还有一个 binary(16) 列,其中包含用于存储 UUID 的唯一索引。

MySqlConnector 有一个 GuidFormat 的连接选项,其中,我在 TimeSwapBinary16LittleEndianBinary16 之间感到困惑,因为其中一个是更好的选择以及原因。

UUID 字节按特定顺序排列是否有助于提高效率和性能,例如在插入、索引、使用 WHERE 子句中的 binary(16) 列进行选择等过程中?

有人可以解释一下吗?

有一个通用原则,即按升序将新值插入索引会导致索引效率适度提高。

虽然 MySQL 的默认 UUID 格式包括从时间戳生成的字节,但它们不在 UUID 中使其符合 "insert in ascending order" 目标的字节位置。在 MySQL 8.0 中,他们引入了一个函数 UUID_TO_BIN(),它可以选择重新排列字节,以便在生成 UUID 值时,它们按时间戳排序。

TimeSwapBinary16 连接器选项采用该选项,因此索引插入性能更好。

此博客 post 中显示了非有序 UUID 和有序 UUID 之间的性能差异以及详细的基准测试,如果您有兴趣:https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/