我表中的每个条目'projects'
都有一个唯一的 32 个字符的哈希标识符,使用varchar(32)
.
将其用作primary key
? 是否有推荐的主键大小和数据类型?
我表中的每个条目'projects'
都有一个唯一的 32 个字符的哈希标识符,使用varchar(32)
.
将其用作primary key
? 是否有推荐的主键大小和数据类型?
我会说是的,将这么大的列用作主键是个坏主意。原因是您在该表上创建的每个索引都将包含 32 个字符的列,这会使所有索引的大小膨胀。更大的索引意味着更多的磁盘空间、内存和 I/O。
如果可能,最好使用自增整数键,并简单地在哈希标识符列上创建唯一索引。
这个键不好有几个原因。
取决于您对如何定义主键的用法。我通常使用 INT(11) 作为主键。它使外键变得非常容易。
我刚看到你的编辑。我个人会使用带有自动增量的 int(11)。根据您的设置,这将允许您非常轻松地拥有具有外键约束的其他表。你可以用 varchar 做同样的事情,但我一直认为 int 比 varchar 快,尤其是索引。
将其用作 PKEY 本身并没有错。如果您有许多其他表将其用作 FKEY,则可能不会。没有一个答案。
另请注意,如果您知道它总是正好是 32 个字符,则应该改为 CHAR(32)。
在数据库引擎中,最重要的项目之一是磁盘空间。通过减少数据库传输和传输的数据量,保持小而紧凑的数据通常与良好的性能相关联。如果表将有几行,则没有理由定义 INT 类型的 PK。可以使用 MEDIUMINT、SMALLINT 甚至 TINYINT(就像使用 DATE 而不是 DATETIME 一样),这一切都是为了保持简洁。