什么是最有效的 UUID 列类型

Vla*_*cea 19 mysql postgresql index oracle sql-server

为了存储 128 位 UUID,有多种存储选项:

  1. 一个字节[16]列
  2. 两个 bigint/long(64 位)列
  3. CHAR(36) 列 - 32 个十六进制数字 + 4 个破折号。
  4. 一个 UUID 数据库特定列,如果 db 支持它

从索引的角度来看,哪些是最有效的?如果数据库不支持专用的 uuid 类型,那么 1、2、3 中的哪一个是最佳选择?

Cra*_*ger 21

专用uuid类型是 PostgreSQL 的最佳选择。其他数据库很难说 - 有人实现一种uuid存储效率低于简单字节类型的类型并非不可能。

再次在 PostgreSQL 中,bytea如果您没有uuid类型,这将是存储 UUID 的合理方法。对于其他数据库,这取决于它们如何存储二进制数据。

在可能的情况下,我强烈避免使用带破折号的十六进制。比较、排序和存储的效率较低。

所以真的,“不是(2)或(3)”。曾经。在支持的情况下使用 (4),否则使用 (1)。

  • @ChristopheRoussy 那是 2013 年的事。这是一个小疏忽。`选择数组['ef1e0638-072e-4caa-88b3-97bfa5b2e8c3']::uuid[]` (2认同)