我们有一个用于products的mysql数据库表。我们正在使用缓存层来减少数据库负载,但我们认为最好是将需要存储在缓存层中的实际数据最小化,以进一步加快应用程序的速度。
数据库中对访问者可见的所有产品都附有价格:
价格存储在不同的表中,称为prices。根据每位访客(客户)适用的折扣级别,有多种价格类别。时不时地,有一些活动,这意味着每种产品都有一个特别的价格。特殊价格存储在一个名为specials的表中。
制作一个将表绑定在一起的临时表是不是不好?
它将只有必要的信息,当然会被缓存。

-------------|-------------|------------
| productId  |  hasPrice   | hasSpecial
-------------|-------------|------------
  1          |  1          | 0
  2          |  1          | 1

通过这样做,可以非常容易地知道特定产品是否真的有价格,而无需每次列出或展示产品时都遍历完整的pricesspecials表。
临时表是web应用程序的常见事物还是仅仅是糟糕的设计?

最佳答案

您应该像处理其他性能问题一样处理它:确定需要多少性能,然后在实验室中重复对生产级硬件进行测试。不要进行不必要的优化。
你应该分析一下你的应用程序,看看它是否做了太多的查询,或者查询本身很慢;大多数情况下,web应用程序的速度慢是因为做了太多的查询(以我的经验来看),尽管查询很容易。
通常,最好的工程解决方案是重新构造数据库(在某些情况下是非规范化的),以使公共读取用例所需的查询更少。缓存也可能有帮助,但重构以便减少查询通常是最好的。
实际上,如果您计划进行比写入多得多的读取,则可以增加写入路径上的工作量以减少读取路径上的工作量。

09-11 19:17