【问题标题】:Performance: UUID vs auto-increment in cakephp-mysql性能:cakephp-mysql 中的 UUID 与自动增量
【发布时间】:2010-10-19 20:39:00
【问题描述】:

我正在搜索 cakePHP 生成的 UUID(32 字符长)与自动增量相比在性能上是否更快。插入和选择操作的比较。 我应该使用 cakePHP 生成的 UUID 还是使用 MySQL 的简单自动增量生成的 UUID

这是我发现的一个案例研究,但它并不特定于 cakePHP

http://krow.livejournal.com/497839.html

【问题讨论】:

  • 性能问题很少来自主键。很少见。
  • 随机顺序 (UUID) 的一个优点是 用户 无法分辨创建顺序。

标签: mysql performance cakephp primary-key


【解决方案1】:

我怀疑您在选择主键时会注意到很多性能问题。您的瓶颈将在其他地方,几乎可以保证。

默认情况下,我建议只使用自增主键。这是有道理的——您一眼就知道插入了哪些订单记录,因此如果测试数据等,您可以更轻松地删除它们。此外,背诵数字比 32 字符 UUID 更容易。所以可用性取决于自动递增的 INT。

那么你什么时候会使用 UUID?任何你想确保密钥是全局唯一的(或者非常接近它)的情况。一个例子是分片数据库; db1 和 db2。您不能使用自动增量 INT,因为这样您最终可能会拥有 2 条具有相同主键的记录(一条在 db1 中,一条在 db2 中),如果您需要合并或重新分片,这将导致噩梦。这是需要使用 UUID 的一个示例。

但通常只坚持使用自动递增的 INT。它只是让生活更美好。

【讨论】:

  • 实际上,我会完全相反。用于可移植性和可逆性的 UUID。除了性能之外,INT 没有任何令人信服的好处,正如您所指出的,在大多数情况下,性能充其量只是名义上的。
  • 也许这是“各有各的”情况之一。我发现,尤其是在最初的开发工作中,我不断地按相反的顺序对我的记录进行排序,这样我就可以删除我刚刚添加的行。当您对 UUID 进行排序时,它们是否按创建顺序排序?同样,对于我(作为一名程序员)来说,查看 INT 而不是 32 长度的字符串似乎更容易。
  • 是的,我很好奇,因为我发布的链接显示 UUID 与 auto-inc 相比是有效的,尽管我个人更喜欢使用 auto-inc..
  • 使用自动增量来确定记录年龄会让你大吃一惊。如果您需要将记录创建日期/时间存储在专用字段中。应该避免使用代理键作为元数据来处理它不应该的东西。
  • @Abba 我同意你的看法。但是,当我将测试数据插入记录并想要检查它时,能够按人类可读字段(并且易于解析的字段,这就是为什么我更喜欢 int 而不是日期字段)快速排序是很好的。
【解决方案2】:

最好将该逻辑放在数据库中,插入和选择会更快。因为当 MySQL 使用自动增量值创建 PK 时,会自动在该字段上创建索引,并且为了更好的性能将其放在驱动器上的正确位置,所以如果您使用排序,索引 PK 将比 32 个长字符更快。

【讨论】:

  • UUID 和 PK 不是互斥的。 UUID 可以作为 PK 进行索引。
猜你喜欢
  • 2013-01-02
  • 2011-01-22
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多