我正在开始一个项目,其中查询的每个结果的性能(速度)非常重要。
情况:
每个产品还有一个VAR,每月,3个月,6个月,1年,3年价格,随机更新
输出1(每日估计5,000次观看次数)
所有产品,当日定价,价格差异,百分比差异,透光价格
日期,价格,价格差异,百分比差异,透光价格
注意:此项目基于ExpressionEngine构建
我的主要问题是,我是否应该创建一个表格,将所有产品信息与产品ID保存在一起,然后将所有产品的所有每日定价都放在一个表格中。然后,由于每种类型的定价一次只使用一种类型,因此第二张表中所有产品的每月定价等不同的定价。
或。我应该制作20-30张桌子来存储他们自己的每日定价吗?然后在查询时使用JOIN
我已经研究了很多类似的问题和答案,但我似乎找不到足够接近的情况。
答案 0 :(得分:1)
输出1.每次执行全表扫描以从数据库返回所有行时,它都会变得非常耗时。但是20-50个产品是变化的,数据库应该没有问题。如果您开始添加大量产品,您可以始终引入分页并在每页显示100个左右的产品。第二种方法是将主页缓存一段时间并定期刷新。
输出2.只要您将产品ID或标题编入索引,单个产品的查找应该非常快。
20-30张桌子听起来像是难以维持,并且做很多连接将是一场噩梦。不要试图过早优化。只有在发现问题时才会关注它。
答案 1 :(得分:0)
我将始终倾向于单表方法,而不是一组表格。
您应该在表格上使用索引,这将大大提高性能。
维护自己的滚动表分区的开销远远超过单表方法。
每个“实体”应该有一个表。
所以产品静态数据表,定价数据表等等。
答案 2 :(得分:0)
采用父子方法。并确定表格的正确关系。您的数据处理还取决于您在后端使用的软件..
答案 3 :(得分:0)
首先,您所询问的内容并不完全清楚 - 您是在询问是否应该对数据进行非规范化,或者是否应该对数据进行分区?
其次,这两个问题的答案都是“不”。或者,更准确地说“不,请,请不要,以所有圣洁的名义 - 不!”。
您的数据库将变得很小 - 每年365次价格变动的50种产品仍然只有15K记录。你甚至还没有接近一个设计合理的“传统”数据库架构会很慢的地步;非规范化和分区都会产生大量的维护开销,使应用程序更加脆弱,并且需要大量的开发时间。
我强烈建议构建一个规范化的数据模型,用大量数据填充它(至少是预期最大值的两倍),运行您希望运行的查询,然后通过测量它来确定您是否遇到问题查询的性能。如果您这样做,请优化查询。如果它仍然变慢,购买更大/更好的硬件。如果它仍然缓慢,请考虑去标准化。如果这太慢了,你就是在为Facebook工作。