uuid v4 vs v6(有序),哪个对 MySQL 更有效?
uuid v4 vs v6 (ordered), which more efficient for MySQL?
我有一个问题,我想知道你的意见。
我有一个id为主键,uuid为副键的model,注意我所有的外部调用,也就是通过API调用,都是用uuid来标识记录的,所以我想知道,使用标准版本 4 或版本 6(已订购)效率更高吗?因为我想象如下,尽管uuid列被索引了,当通过API以uuid作为标识符进行请求时,数据库仍然需要在索引记录中查找它,数据库不会更容易如果是“已订购”(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),则页面拆分较少,table 最终存储得更紧凑。
在某种程度上,更紧凑的 table 平均每页存储更多记录,因此分配给缓存的给定量 RAM 可以容纳更多 table 使其更高效.
该博客是关于主键的。您问的是辅助键。
这同样适用于存储在页面中的任何 B 树。如果以随机顺序插入,则更有可能导致碎片和页面拆分。如果按升序插入,会更紧凑
我有一个问题,我想知道你的意见。
我有一个id为主键,uuid为副键的model,注意我所有的外部调用,也就是通过API调用,都是用uuid来标识记录的,所以我想知道,使用标准版本 4 或版本 6(已订购)效率更高吗?因为我想象如下,尽管uuid列被索引了,当通过API以uuid作为标识符进行请求时,数据库仍然需要在索引记录中查找它,数据库不会更容易如果是“已订购”(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),则页面拆分较少,table 最终存储得更紧凑。
在某种程度上,更紧凑的 table 平均每页存储更多记录,因此分配给缓存的给定量 RAM 可以容纳更多 table 使其更高效.
该博客是关于主键的。您问的是辅助键。
这同样适用于存储在页面中的任何 B 树。如果以随机顺序插入,则更有可能导致碎片和页面拆分。如果按升序插入,会更紧凑