最有效的方法来跟踪用户使用MySQL选择的数字列表?

时间:2012-07-30 12:06:48

标签: mysql row selection

假设用户可以从1 - 300的列表中选择任意数量的数字,我们需要跟踪每个用户的选择。请记住,他们可以选择最多300个数字(例如,他们选择所有数字,1,2,3 ... 299,300),根本没有,或介于两者之间(例如4,17,87,113,189) ,251,289)。

跟踪MySQL中每个用户选择的最佳,最有效的方法是什么?

我能想到的两个选择是:

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

2)每个单独选择一行,其中包含与其对应的用户的列以及用于进行单个选择的另一列。添加和删​​除选择只需要对与该用户和选择对应的行执行INSERT或DELETE。

嗯,2)对于数据库来说似乎更“自然”,但当你有成千上万的用户进行300次选择时,几乎似乎效率低下,这将创建一个表行数等于这两行的乘积。而1)只包含相当于用户数的行数。

那就是说,我倾向于2)因为这对DB来说更自然,但我只是想确保它是正确的选择而没有更有效的方法来做到这一点,因为我不想要我的随着它越来越大,网站因此而放慢速度。

谢谢!

2 个答案:

答案 0 :(得分:0)

SQL在处理数据行方面非常有效,在一列中查询数据的效率要低得多。

答案 1 :(得分:0)

从内存/磁盘的角度来看,由于#1的稀疏填充特性,正确编制索引#2会更好。此外,每个用户1或300行意味着很少进行索引查找,您将在对数时间内执行搜索。