mysql - uuid v4 vs v6(有序),哪个对 MySQL 更有效?

标签 mysql mariadb uuid

我有一个问题,我想知道你的意见。

我有一个id为主键,uuid为副键的model,注意我所有的外部调用,也就是通过API调用,都是用uuid来标识记录的,所以我想知道,是不是效率更高使用标准版本 4 还是版本 6(已订购)?因为我想象如下,尽管uuid列被索引了,当使用uuid作为标识符通过API发出请求时,数据库仍然需要在索引记录中查找它,数据库要找到这条记录并不容易如果被“订购”(v6)?

数据库:MySQL/MariaDB

最佳答案

Michael Coburn 发表了一篇关于此的精彩博客:https://www.percona.com/blog/2015/04/03/illustrating-primary-key-models-in-innodb-and-their-impact-on-disk-usage/

博客是2015年写的,但思路还是对的。

他展示了使用无序 UUID 以“随机”顺序插入记录会导致大量碎片,因为以随机顺序插入会导致许多页面拆分。而当记录按插入顺序存储时,因为主键是单调递增的(例如,自动递增整数或有序的 UUID),则页面拆分更少,表最终存储得更紧凑。

在某种程度上,更紧凑的表平均每页存储更多记录,因此分配给缓存的给定 RAM 量可以容纳表的更大部分,从而提高效率。


该博客是关于主键的。您询问了辅助键。

这同样适用于存储在页面中的任何 B 树。如果以随机顺序插入,则更有可能导致碎片和页面拆分。如果按递增顺序插入,它会更紧凑。

关于mysql - uuid v4 vs v6(有序),哪个对 MySQL 更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67348404/

相关文章:

php - 如何从 foreach 中获取确定值

mysql - MySQL 中的求和值

c# - SQL依赖于 MariaDB/MySQL 数据库

mysql - MariaDB如何处理重复主键的同时插入

java - 在多线程应用程序中生成相同的 UUID

php - undefined offset : 0 error

mysql - 如何将时间戳设置回 0000-00-00 00 :00:00?

mysql - 如何在laravel中将数组保存到mysql数据库

postgresql - 如何在 Postgres 中为 UUID 主键列设置默认值?

c++ - 如何在 C++ 中生成 UUID,而不使用 boost 库?