【发布时间】:2011-08-21 21:14:03
【问题描述】:
我正在设计一个成员表来存储网站的用户。每次用户登录网站时都会使用它,并且偶尔会访问它以更新用户详细信息。
用户将使用电子邮件地址和密码登录,每个帐户都将拥有一个唯一的电子邮件地址。因此,成员表的电子邮件列应该是它的聚集索引似乎是合乎逻辑的,因为当用户登录时,该表上的大多数查询将针对电子邮件列。使 Email 列唯一和聚集索引的键应该可以在用户登录时快速查询用户的数据并提高性能。
但据我了解,将电子邮件列设置为主键是错误的,原因有两个。第一,主键应该是不变的,所以如果用户决定更改他们的电子邮件地址,那么所有外键都必须更新,这会很糟糕。其次,电子邮件地址是字符串,这会使 Join 比 PK 为 int 时更慢。
那么我可以将非聚集索引设为主键吗?这样表就既有一个以电子邮件为唯一键的聚集索引,又有一个 int 主键作为顶部的非聚集索引?
谢谢, 邓肯
【问题讨论】:
标签: sql-server sql-server-2008 clustered-index database-design