我一直在寻找解决此问题的最佳方法,但我找不到任何此类问题的例子。
我正在建立一个超本地化的互联网购物中心,该区域分为约3000个区域。每个区域包含约300个项目。它们是类似的项目,但每个区域可以变化很小。我需要获取"可用项目列表"对于每个区域。
插入速度不是问题,主要是根据"区域"值。为这样的实例设置数据库的最有效方法是什么?
包含1M行的表格,例如
id |区域|项目|果
1 | 1 | 1 | ÿ
2 | 1 | 2 | ñ
...
1262 | 4 | 35 | ÿ
包含3000行的300个表,例如
表:zone1
id |项目|果
1 | 1 | ÿ
2 | 2 | Ñ
表:zone4
id |项目|果
...
35 | 35 | ÿ
包含300列(每个项目),3000行
的1个表 id |区域| item1 | item2 ...
1 | 1 | Y | N ...
...
4 | 4 | Y |是的......
提前感谢任何帮助或我可以使用的任何线索,以便我做出决定!
答案 0 :(得分:2)
基于意见的限制,但我们走了;
选项1很可能是您想要的。
选项2会为你提供300个表来维护,所以如果你需要在以后添加一个字段,你就有300个表可以改变哪些听起来像是一个可维护性的噩梦。此外,300个索引最有可能缓存比单个更大的索引更糟糕,并且在所有区域中搜索特定项目基本上是不可能的。
选项3要求您更改表结构和查询以添加超过300个项目。另外,为了能够通过id找到一个项目,你需要看起来像SELECT xx FROM yy WHERE item1=57 OR item2=57 OR ... OR item300=57
的SQL,MySQL的优化器很可能会放弃它。
答案 1 :(得分:1)
对于关系数据库的观点,您应该选择第一个选项。 - 如果有一天您必须添加新项目或新区域,则无需创建新列或新表,如果需要删除项目/区域,则无需创建新项目或新区域。
但是从NoSQL的角度来看,你应该选择像选项2这样的表。
答案 2 :(得分:0)
只需使用第一个选项。 1M行,1个表,几列。
答案 3 :(得分:0)
第一个选项是最好的选择。 DBMS会在每个表和每行产生很大的开销。此外,它们不是针对许多表格和多行的情况而设计的。