一个大的MySQL表与20 - 50个较小的表?

时间:2012-09-12 04:47:12

标签: mysql database-design

我正在开始一个项目,其中查询的每个结果的性能(速度)非常重要。

情况:

  • 约20-50种产品(将随着时间的推移而增加:约3年/年)
  • 每个产品都有一个配置文件页面,其中包含约20个需要存储的VAR
  • 每件商品的定价都会有变化(插入/添加) ---每日---
  • 每个产品还有一个VAR,每月,3个月,6个月,1年,3年价格,随机更新

  • 输出1(每日估计5,000次观看次数)

所有产品,当日定价,价格差异,百分比差异,透光价格

  • 输出2(按个人产品的范围搜索表单|查看未知的Est。每日观看次数为100次)

日期,价格,价格差异,百分比差异,透光价格

  • 瘾。随机定价将是必需的。

注意:此项目基于ExpressionEngine构建

我的主要问题是,我是否应该创建一个表格,将所有产品信息与产品ID保存在一起,然后将所有产品的所有每日定价都放在一个表格中。然后,由于每种类型的定价一次只使用一种类型,因此第二张表中所有产品的每月定价等不同的定价。

或。我应该制作20-30张桌子来存储他们自己的每日定价吗?然后在查询时使用JOIN

我已经研究了很多类似的问题和答案,但我似乎找不到足够接近的情况。

4 个答案:

答案 0 :(得分:1)

输出1.每次执行全表扫描以从数据库返回所有行时,它都会变得非常耗时。但是20-50个产品是变化的,数据库应该没有问题。如果您开始添加大量产品,您可以始终引入分页并在每页显示100个左右的产品。第二种方法是将主页缓存一段时间并定期刷新。

输出2.只要您将产品ID或标题编入索引,单个产品的查找应该非常快。

20-30张桌子听起来像是难以维持,并且做很多连接将是一场噩梦。不要试图过早优化。只有在发现问题时才会关注它。

答案 1 :(得分:0)

我将始终倾向于单表方法,而不是一组表格。

您应该在表格上使用索引,这将大大提高性能。

维护自己的滚动表分区的开销远远超过单表方法。

每个“实体”应该有一个表。

所以产品静态数据表,定价数据表等等。

答案 2 :(得分:0)

采用父子方法。并确定表格的正确关系。您的数据处理还取决于您在后端使用的软件..

答案 3 :(得分:0)

首先,您所询问的内容并不完全清楚 - 您是在询问是否应该对数据进行非规范化,或者是否应该对数据进行分区?

其次,这两个问题的答案都是“不”。或者,更准确地说“不,请,请不要,以所有圣洁的名义 - 不!”。

您的数据库将变得很小 - 每年365次价格变动的50种产品仍然只有15K记录。你甚至还没有接近一个设计合理的“传统”数据库架构会很慢的地步;非规范化和分区都会产生大量的维护开销,使应用程序更加脆弱,并且需要大量的开发时间。

我强烈建议构建一个规范化的数据模型,用大量数据填充它(至少是预期最大值的两倍),运行您希望运行的查询,然后通过测量它来确定您是否遇到问题查询的性能。如果您这样做,请优化查询。如果它仍然变慢,购买更大/更好的硬件。如果它仍然缓慢,请考虑去标准化。如果这太慢了,你就是在为Facebook工作。