有可能我需要做很多用户名 - >用户名查找.所以我在想,而不是像下面这样的表
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字节)更快的查找和更少的数据作为奖励.但我知道我可能是错的,我应该做哪个版本以及优化旁边的原因是什么?
您应该为规范化和性能执行第一个选项(单个表).
性能:
(UserId, Username),你将有一个覆盖索引 - 所以你不需要去表格来获取用户名.UserId,你将得到一个聚集索引搜索 - 无论如何它将最终在行数据.正常化:
我的建议是UserId上的聚集索引.如果你需要其他地方的聚集索引,覆盖索引几乎一样好.