2012-07-30 49 views
1

假设用户可以从列表中选择任意数量,我们需要跟踪每个用户的选择。请记住,他们可以选择多达300个数字(例如,如果他们选择所有数字,1,2,3 ... 299,300),根本没有或者其中的某个数字(例如4,17,87,113,189 ,251,289)。跟踪用户使用MySQL选择的数字列表的最有效方法?

什么是最好,最有效的方式来跟踪每个用户在MySQL中的选择?

的两个备选方案我能想到的是:

1)一行为每个用户,与含有以逗号分隔它们的选择的列表中的列。添加和删​​除选择需要获取该用户的列,添加/删除选择,然后将列表保存回列。

2)每一行对应一个单独的选择,与用户的列其对应于和用于取得的个体选择另一列。添加和删​​除选择只需要对该用户和选择对应的行执行INSERT或DELETE操作。

好,2)似乎是为DB更“自然”,但它几乎似乎效率不高,当你有几十万用户的每个组成300点的选择,这将创建一个表与多个行等于这两者的乘积。而1)只包含等于用户数量的行数。这就是说,我倾向于2),因为它对数据库来说更自然,但我只是想确保它是正确的选项,并且没有更有效的方法来做这件事,因为我不想要这样做,因为我不想要这样做,因为我不想要这样做,因为我不想要我的网站因为这个越来越大而放慢速度。

谢谢!

+0

不适用于预优化。因此,只要采取解决方案2,如果需要,您可以随时添加缓存等,以便在需要时获得更快的解决方案。 – 2012-07-30 12:11:08

+0

您不仅应该考虑“效率”,还应该根据这些数据来做什么。你需要用它来计算;那些条目是纯数字还是有任何元数据绑定到他们...... – feeela 2012-07-30 12:13:51

回答

0

如果由于存储器/磁盘透视图中#1的稀疏填充性质而导致适当索引#2,则效果会更好。另外,每个用户1或300行对于在对数时间执行搜索的索引查找意义不大。

0

SQL在处理数据行时效率非常高,在查询一列中的数据时效率低得多。

相关问题