我应该如何在mysql中插入/更新/删除大型列表?
我正在试图找出处理插入/更新/删除大型列表的最佳方法 具体来说,我的用户需要选择大量的产品列表,他们每天晚上都会收到关于这些产品的报告 为了简化它,这里是数据模型(简单的多对多) 问题是产品是批量选择的,因此如果用户单击全选(他们经常这样做),他们将选择大约6000个产品,这相当于一个大型插入查询 此外,他们可以根据一系列不同的标准更新和删除这些列表,例如它们属于什么类别、价格点等 每次他们想要更新他们的列表时,我必须检索他们选择的产品,删除他们取消选择的产品,然后插入任何新产品 这个过程看起来很麻烦,我想知道是否有更好的解决方案 我考虑不存储用户想要的产品,而是只存储用户不想要的产品,从而限制频繁的大型插入/更新查询的开销。 这样,默认情况下,每个用户都可以获得所有可用的产品 该解决方案的问题是,当新项目到达时,用户可能不希望报告中包含这些项目,因此我必须维护一个单独的表,其中规定默认项目是什么 非常感谢能帮助我的人我应该如何在mysql中插入/更新/删除大型列表?,mysql,list,many-to-many,Mysql,List,Many To Many,我正在试图找出处理插入/更新/删除大型列表的最佳方法 具体来说,我的用户需要选择大量的产品列表,他们每天晚上都会收到关于这些产品的报告 为了简化它,这里是数据模型(简单的多对多) 问题是产品是批量选择的,因此如果用户单击全选(他们经常这样做),他们将选择大约6000个产品,这相当于一个大型插入查询 此外,他们可以根据一系列不同的标准更新和删除这些列表,例如它们属于什么类别、价格点等 每次他们想要更新他们的列表时,我必须检索他们选择的产品,删除他们取消选择的产品,然后插入任何新产品 这个过程看起来
编辑:只是为了澄清,用户不限于选择标准。他们还可以直接选择产品和产品组。用户的独特之处在于他们都非常熟悉产品(几乎所有6000种产品中,大多数都知道) 另一种可能是对用户产品表进行分区。MySQL 5.1增加了表分区支持: 每次他们想要更新他们的列表时,我必须检索他们选择的产品,删除他们取消选择的产品,然后插入任何新产品
我想指出的是,我认为最终会发生的是,实际数据将分散在整个存储空间中,因为您不会删除所有内容,然后重新添加。优化器可能会发现,使用索引进行全扫描比随机搜索更有效。但我不确定这一点。您可能希望尝试存储选择标准,而不是产品本身。例如,存储“价格<10且类别=‘运动’”,而不是存储符合这些标准的产品(可能很长)列表。然后,您可以通过将选择条件应用于当前产品列表来重新创建列表 您必须弄清楚应该使用什么语法来存储条件。也许SQL会起作用,也许你会想要别的东西。修改可能很棘手,您需要强制执行一些简单的逻辑来缓解这种情况,例如,标准必须是简单字段/值比较的OR
这种方法的问题在于,您需要将用户限制在特定的选择标准上,如果您不小心,这可能会造成很大的麻烦(许多用户要求您实现他们自己的定制标准)。我不确定我会向大家推荐这个方法,但这是另一个选择。 < P>你可以在你的关联表中添加一个额外的<代码> RePotox < <代码> >列吗?然后,该表中的行将或多或少保持静态,当用户主动更改条件时,您只需更新单个行和一批行。这需要使用动态SQL来使用选择条件,如果产品/etc添加超出该限制,则风险很大。如果客户购买了特定的产品,也会非常痛苦地进行检索……我会考虑这种方法,但用户的选择不仅仅基于标准。他们还可以按产品ID选择单个产品。您的标准之一可以是“productId=”。你只是希望用户只选择少数几种产品,而不是全部6000.OMG,你是对的,如果你需要查找哪些用户选择了特定的产品,那么这将不起作用。对不起,我没有完全理解。你是建议我创建第三列来指定是否包含该项目吗?@Bill H:是的,这正是我的建议。
~ 5000 records total
+----------+------------+
| user_id | user_name |
+----------+------------+
| 1 | Ralph |
| 2 | Bill |
| 3 | Joe |
| 4 | Mike |
| 5 | Brian |
| 6 | Jose |
+----------+------------+
~ 6000 records total
+------------+------------+
| product_id | product |
+------------+------------+
| 1 | Widget A |
| 2 | Widget B |
| 3 | Widget C |
| 4 | Widget D |
| 5 | Widget E |
| 6 | Widget F |
+------------+------------+
As many as 30 million total
+----------+------------+
| user_id | product_id |
+----------+------------+
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 2 |
| 2 | 4 |
| 2 | 5 |
+----------+------------+