1

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

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

我能想到的两种选择是:

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

2)每个单独的选择一行,对应用户的一列和所做的单独选择的另一列。添加和删​​除选择只需要对与该用户和选择相对应的行执行 INSERT 或 DELETE。

好吧,2)对于数据库来说似乎更“自然”,但是当您有数十万用户每个选择多达 300 个选项时,它几乎似乎效率低下,这将创建一个行数等于乘积的表那两个。而 1) 将仅包含与用户数相等的行数。

也就是说,我倾向于 2),因为它对数据库来说更自然,但我只是想确保它是正确的选项,并且没有更有效的方法可以做到这一点,因为我不希望我的网站变慢因为它变得越来越大而下降。

谢谢!

4

2 回答 2

0

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

于 2012-07-30T12:11:39.557 回答
0

如果从内存/磁盘的角度来看,由于 #1 的人口稀少,正确索引 #2 会更好。此外,每个用户 1 或 300 行对于您在对数时间内执行搜索的索引查找来说意义不大。

于 2012-07-30T12:12:33.987 回答