带有长字符的主键

时间:2014-06-19 14:29:08

标签: sql database database-design database-performance

我有一张这样的表

user(#id, login, password)

但我想让它像

一样
user(#login, password)

因为每个用户的登录都是唯一的

我想知道这是否是一个很好的解决方案?它会影响具有长char(索引)的主键的速度(性能)吗?

2 个答案:

答案 0 :(得分:0)

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

由于这个问题并不完全重复,我会给出一个答案,但也有一些链接到核心问题,因为它已经很好地覆盖了。

与大多数数据库性能问题一样,它最终取决于。 :)
如果您的登录时间很短和/或您没有大量登录,则可能与整数键没有太大区别。
您可能还会考虑是否允许某人更改其登录信息......如果是这样,您将需要代理整数来保留密钥。


有关这方面的更多信息,以及其他一些人对性能的测试:

Deciding between an artificial primary key and a natural key for a Products table

Surrogate vs. natural/business keys

http://en.wikipedia.org/wiki/Surrogate_key

答案 1 :(得分:-1)

永远不要使用char或varchar主键。

使用自增量标识作为PK(tinyint,smallint,int或甚至bigint),这将用于链接到其他表作为其FK并且将更快。

如果登录字段常用,您仍然可以在登录字段中创建唯一的非聚集索引。