这种方法是提高MySQL性能的好主意还是坏主意?

时间:2011-04-02 23:49:10

标签: mysql database-design

我正在构建电子商务CMS,在管理部分我想显示订单总数,所有订单的总收入,还会逐个显示每个类别的总计。

我可以通过查询各种表并计算总和来做到这一点,但这会是一种更好的方法:

相反,我想要一个看起来像这样的表(并且只有一条记录):

id | total_orders | total_earnings | toy_cat_sales | apparel_cat_sales | etc...
--------------------------------------------------------------------------------
1  | 10           | 10034          | 4             | 6                 | etc...

现在,每次购买时我都可以更新此记录,例如,当新玩具订单生成时,我可以更新toy_cat_sales列以及total_orders和total_earnings列以反映新购买。

在实际查找过程中,查询这一个表并显示它的值显然比在多个表上执行计数和计算要快得多,而且可能有数万条记录。

但这种方法总体上是值得的吗?我知道只有一个管理员和许多客户。与管理员检查后端的这些统计数据相比,订单也会发生更多。因此,如果实施第二种方法,更新将比管理端的查找更多。

我不是MySQL专家,所以这里的专家会做什么,我将继续这样做。

2 个答案:

答案 0 :(得分:2)

这可能不是一个好主意。

虽然它会使一些查询更简单/更快,但每次插入都需要额外的工作。更不用说保持更新的新编程要求。您似乎意识到,当您承认“订单将会发生更多”时,您在上一段中不值得这样做

这种单行表解决方案也不是非常可扩展的。每个类别都需要自己的COLUMN,这需要改变一个表格。

我认为您最好的解决方案就是编写查询以在需要时查找这些统计信息。至多是一种观点。这些中的任何一个都可以包含与您的类别表的连接,使其更易于扩展以添加(或删除)类别。

即使你决定保留这些元数据是值得的(很可能不是这样),但有比这个表更好的方法。

答案 1 :(得分:1)

使用此方法遇到的问题是,每次携带新产品时都必须向该表添加新列。你真的不想这样做。

产品表中的每个行都是产品,订单表和orders_products表,其中包含fk的订单和产品,以便将每个产品与特定产品绑定在一起命令那个顺序。然后在需要时计算所有内容。计算机进行数学计算所需的时间与上面的想法浪费在维护上的时间相比没什么,特别是一旦你开始向该表添加新列并且它有数百万行,这需要一些时间

相关问题