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 添加:复合键也可以防止重复行,而无需在两个字段上都使用额外的唯一索引。