table 中的主键
Primary key in table
我有 table USERLIST
和 [UserName]
,[AppId]
,数据会像
UserName AppId
-------- -----
abc 1
abc 18
abc 2
abc 24
abc 29
abc 30
abc 33
abc 4
abc 5
abc 6
abc 8
xyz 1
xyz 18
xyz 2
我的查询将主要针对 USERNAME
点赞
select applist.APPID
,applist.APPDESC
,applist.APPTHUMB
,applist.APPURL
,applist.APPTTILE
,applist.UNIQUEID
,applist.Domain
,RANK
from APPLICATIONLIST applist, USERLIST du
where du.APPID = applist.APPID
and upper(du.USERNAME) = upper(''' +@userName + ''')
我想知道我应该使用什么主键,代理键还是将两列都作为主键(复合键)?
我这里的想法是做一个[AppId, UserName]的组合键。
- 首先,没有 AppId 的用户名是无关紧要的,因此 AppId 将始终被使用,因此无论如何它都是密钥中的第一列。
- 创建用户不是一个机械动作,一次只发生一次,因此插入速度变慢不是什么大问题。
- 取决于您对每个应用的用户数的估计,上面的查询可能 运行 随着您的数据随着复合 PK 的增长而变得更快。
- Tony 添加:复合键也可以防止重复行,而无需在两个字段上都使用额外的唯一索引。
我有 table USERLIST
和 [UserName]
,[AppId]
,数据会像
UserName AppId
-------- -----
abc 1
abc 18
abc 2
abc 24
abc 29
abc 30
abc 33
abc 4
abc 5
abc 6
abc 8
xyz 1
xyz 18
xyz 2
我的查询将主要针对 USERNAME
点赞
select applist.APPID
,applist.APPDESC
,applist.APPTHUMB
,applist.APPURL
,applist.APPTTILE
,applist.UNIQUEID
,applist.Domain
,RANK
from APPLICATIONLIST applist, USERLIST du
where du.APPID = applist.APPID
and upper(du.USERNAME) = upper(''' +@userName + ''')
我想知道我应该使用什么主键,代理键还是将两列都作为主键(复合键)?
我这里的想法是做一个[AppId, UserName]的组合键。
- 首先,没有 AppId 的用户名是无关紧要的,因此 AppId 将始终被使用,因此无论如何它都是密钥中的第一列。
- 创建用户不是一个机械动作,一次只发生一次,因此插入速度变慢不是什么大问题。
- 取决于您对每个应用的用户数的估计,上面的查询可能 运行 随着您的数据随着复合 PK 的增长而变得更快。
- Tony 添加:复合键也可以防止重复行,而无需在两个字段上都使用额外的唯一索引。