Sql 长字符主键

Sql 长字符主键,sql,database,database-design,database-performance,Sql,Database,Database Design,Database Performance,我有一张这样的桌子 user(#id, login, password) 但我想让它像 user(#login, password) 因为每个用户的登录都是唯一的 我想知道这是否是一个好的解决方案?它将影响长字符(索引)主键的速度(性能)?这总是一个有趣的问题。实际上,在数据库设计中,“自然”键与“代理”键之间存在着长期的争论 因为这个问题并不是完全重复的,所以我会给出一个答案,但也会提供一些核心问题的链接,因为它已经被很好地涵盖了 与大多数数据库性能问题一样,这最终取决于: 如果您的登录很

我有一张这样的桌子

user(#id, login, password)
但我想让它像

user(#login, password)
因为每个用户的登录都是唯一的


我想知道这是否是一个好的解决方案?它将影响长字符(索引)主键的速度(性能)?

这总是一个有趣的问题。实际上,在数据库设计中,“自然”键与“代理”键之间存在着长期的争论

因为这个问题并不是完全重复的,所以我会给出一个答案,但也会提供一些核心问题的链接,因为它已经被很好地涵盖了

与大多数数据库性能问题一样,这最终取决于:
如果您的登录很短,并且/或者您的登录次数不多,那么您可能看不到与整数键有多大区别。
你可能还会想,如果有人被允许更改他们的登录名。。。如果是这样,您将希望代理整数允许您保留密钥


有关这一一般性问题的更多信息,以及其他一些人的性能测试:

从您的链接“IMHO始终支持代理主键。主键不应该有意义,因为这种意义可以更改。即使国家名称可以更改,国家也可以存在和消失,更不用说产品了。更改主键绝对不被建议,这可能发生在自然键上。”这正是我的建议,但显然,在这件事上有一个强有力的和有经验的意见让我被否决,而一个通用的“视情况而定”的答案获胜?显然,用户登录可以更改,显然它可以非常大,所以PK应该是int。