繁体   English   中英

插入 UUID 主键索引的性能

[英]Inserting performance for UUID primary_key index

我读到 UUID 作为 primary_key 的插入性能取决于数据库中存在的记录数。 记录数量越多,插入记录所需的时间就越多

https://kccoder.com/mysql/uuid-vs-int-insert-performance/

上面文章的作者进行了实验,他认为这是因为 UUID primary_key insert 的读取次数比其他自增整数要多。

我想问一下数据库是否自动为选择的primary_key创建索引如果UUID的primary_key索引有问题,插入问题是否可以通过使用整数作为primary_key索引同时保留UUID字段,然后切换主键来解决到 UUID,那么问题是对整数 ID 的外键引用是否会在切换时传播到 UUID 字段?

数据库是否自动为选定的 primary_key 创建索引

是的。 主键总是被索引。 在某些数据库中,索引是聚集索引(意味着数据页上的数据实际上是按键排序的)。 在其他数据库中,索引是强制执行唯一性约束的。

UUID 和索引的问题在于新值不一定大于旧值。 这意味着插入通常在两个现有记录之间进行。 发生这种情况时,您会产生碎片——也就是说,现有数据页需要为新记录腾出空间,有时甚至分成两页。

自增整数没有这个问题。 它被索引(并在 MySQL 中聚集)。 但是,较新的值比任何现有值都大——自动递增的定义。 所以,新的价值会在最后。 碎片仅在行被删除或手动设置值时才会出现。

我建议您使用自动递增的主键,除非您有使用 UUID 的特定原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM