我应该使用整数主ID吗?

art*_*prs 2 sql database optimization performance query-optimization

例如,我总是为users表生成一个自动增量字段,但我还在其用户名上指定了一个UNIQUE索引.在某些情况下,我首先需要获取给定用户名的userId,然后执行所需的查询,或在所需的查询中使用JOIN.这是2次访问数据库或JOIN与varchar索引.

我应该使用整数主ID吗?

INT对 VARCHAR索引有真正的性能优势吗?

Mar*_*ers 6

拥有代理主键有几个优点,包括:

当你在另一个表中有一个外键时,如果它是一个整数,它只占用几个字节的额外空间,并且可以快速连接.如果您使用用户名作为主键,则必须将其存储在两个表中 - 占用更多空间,并且在需要加入时需要更长时间进行比较.

如果用户希望更改其用户名,那么如果您将其用作主键,则会遇到很大问题.虽然可以更新主键,但这样做是非常不明智的,并且可能会导致各种问题,因为此密钥可能已发送到各种其他系统,用于链接,保存在备份中,具有日志已存档等.您无法轻松更新所有这些地方.

  • 使用联接.这比两次访问数据库要快.联接很快 - 这就是数据库的设计目标. (4认同)