我有一个问题,我想知道你的意见。
我有一个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/