MySql UUID 字节顺序
MySql UUID Byte Order
我有一个 MySql table ,其中主键是一个自增列,然后我还有一个 binary(16)
列,其中包含用于存储 UUID 的唯一索引。
MySqlConnector
有一个 GuidFormat
的连接选项,其中,我在 TimeSwapBinary16
和 LittleEndianBinary16
之间感到困惑,因为其中一个是更好的选择以及原因。
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/
我有一个 MySql table ,其中主键是一个自增列,然后我还有一个 binary(16)
列,其中包含用于存储 UUID 的唯一索引。
MySqlConnector
有一个 GuidFormat
的连接选项,其中,我在 TimeSwapBinary16
和 LittleEndianBinary16
之间感到困惑,因为其中一个是更好的选择以及原因。
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/