我有一个MySql表,其中的主键是一个自动增量列,然后我还有一个带有惟一索引的binary(16)列,用于存储UUID。
MySqlConnector有一个用于GuidFormat的连接选项,在这个选项中,我在TimeSwapBinary16和LittleEndianBinary16之间搞不清哪一个是更好的选择以及为什么。
在插入、索引、在WHERE子句中使用binary(16)列进行选择等过程中,按特定顺序排列UUID字节是否会带来效率和性能方面的好处?
有人能解释一下这些吗?
发布于 2019-01-28 01:37:09
一般的原则是,以升序向索引插入新值会产生一个相对更有效的索引。
虽然MySQL的默认UUID格式包括从时间戳生成的字节,但它们不在UUID中的字节位置,这使得它符合“按升序插入”的目标。在MySQL 8.0中,他们引入了函数UUID_TO_BIN(),该函数具有重新排列字节的选项,以便在生成UUID值时,它们按时间戳排序。
TimeSwapBinary16连接器选项使用该选项,因此它更有利于索引插入性能。
如果您有兴趣,可以在这篇博客文章中展示无序和有序UUID之间的性能差异以及详细的基准测试:https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/
https://stackoverflow.com/questions/54386997
复制相似问题