SQL - 2M中潜在的100K记录。设计数据库的最佳方法

时间:2017-07-02 09:34:33

标签: sql-server performance

我的基本表包含200万用户记录,包含30列。

偶尔有一项新的活动可供100K用户(每项活动的不同小组)参与。 每个用户都将进行自我认证,他/她的活动数据将被保存以供进一步使用。

设计数据库的最佳方法是什么?

  1. 将100K复制到Users_In_Activity表中,其中包含基表中所有必需和必需的详细信息。将为每条记录创建一个新的PK(Users_In_Activity主键)。

    • 在此方法中,表与搜索之间不存在联合 记录将由一个PK(Users_In_Activity)从仅100K的记录中完成。
  2. 将用于身份验证的100K用户基本详细信息复制到Potential_Users_In_Activity表。将创建一个新的PK(包括用户PK),并将创建一个新的User_In_activity PK。

    • 对于每次成功的身份验证,将在Actual_Users_In_Activity表中创建完整记录。
    • 搜索记录将由一个PK(Users_In_Activity)仅从100K记录中完成。
    • 在此方法中,是2个表与一个PK(Users_In_Activity)
    • 之间的连接
  3. 对于每次成功的身份验证,将在Actual_Users_In_Activity表中创建完整记录。

    • 在这种方法中没有连接,但搜索将来自所有200万条记录。
  4. 总结

    方法1:创建100K的30列记录。从100K记录中搜索,无需在活动期间创建新记录。不需要加入。只有一个表可以使用。

    方法2:创建5列的100K。从100K的记录中搜索。在活动期间创建新记录(30列)(仅限活动用户)。需要加入。 2表与

    一起使用

    方法3:从2M记录中搜索。在活动期间创建新记录(30列)(仅限活动用户)。 2表与

    一起使用

1 个答案:

答案 0 :(得分:2)

你没有讨论基本设计,

用户表= 200万条记录,USERID是PK。此表仅包含用户详细信息。

活动表=活动详细信息,ACtivityID是PK(此处与用户表无关)。此表包含创建新活动时的活动详细信息。

User_Activity_Mapping = ActivityID,USERID(此处复制100K用户):这是此处的用户 - 活动关系表。

通过适当的索引,它可以正常工作。

让我知道