sql userid + name + profile优化问题

1 sql database optimization

有可能我需要做很多用户名 - >用户名查找.所以我在想,而不是像下面这样的表

userid int PK
username text
userpass_salthash int
user_someopt1 int
user_sig text
Run Code Online (Sandbox Code Playgroud)

让它分解如下

//table1
userid int PK
username text

//table2
userid int //fk
userpass_salthash int
user_someopt1 int
user_sig text
Run Code Online (Sandbox Code Playgroud)

推理我会这样做是因为我怀疑一个不太复杂的表(如果我愿意,我也可以使名称不再是32字节)更快的查找和更少的数据作为奖励.但我知道我可能是错的,我应该做哪个版本以及优化旁边的原因是什么?

Mar*_*ett 5

您应该为规范化和性能执行第一个选项(单个表).

性能:

  • 如果你打开索引(UserId, Username),你将有一个覆盖索引 - 所以你不需要去表格来获取用户名.
  • 如果你打开你的聚簇索引UserId,你将得到一个聚集索引搜索 - 无论如何它将最终在行数据.

正常化:

  • 第二个选项允许用户存在于table1中,但不允许存在于table2中.由于您可能不希望没有密码的用户(无法登录),我认为这已经破了.

我的建议是UserId上的聚集索引.如果你需要其他地方的聚集索引,覆盖索引几乎一样好.