使用临时表是明智的吗?

时间:2010-04-29 12:18:07

标签: mysql performance database-design scalability temp-tables

我们有products的mySQL数据库表。我们正在利用缓存层来减少数据库负载,但我们认为最小化需要存储在缓存层中的实际数据以进一步加速应用程序是个好主意。

数据库中对访问者可见的所有产品都附有价格:

价格存储在另一个名为prices的表中。根据每位访客(客户)适用的折扣级别,有多种价格类别。有时,有一些活动意味着每种产品都有特价。特殊价格存储在名为specials的表格中。

  • 制作一个将表绑定在一起的临时表是不是很糟糕?

它只会有必要的信息,并且会被缓存。

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

通过这样做,可以非常容易地知道特定产品是否真的有价格,而不必每次产品列出时都要遍历完整的pricesspecials表格或呈现。

  • 临时表是Web应用程序的常见问题,还是设计不好?

2 个答案:

答案 0 :(得分:2)

如果你要缓存这些数据,它真的需要在临时表中吗?当您需要重建缓存时,您只会产生查询的开销,因此甚至可能不需要临时表。

答案 1 :(得分:1)

您应该像其他任何性能问题一样处理它:确定需要多少性能,然后在实验室中迭代对生产级硬件进行测试。不要做不必要的优化。

你应该对自己的应用进行分析,并发现它是否进行了太多查询,或者查询本身是否很慢;大多数网络应用程序缓慢的情况都是由于进行了太多查询(根据我的经验),即使查询非常简单。

通常,最好的工程解决方案是重构数据库,在某些情况下是非规范化,以使常见的读取用例需要更少的查询。缓存也可能有用,但重构因此您需要更少的查询通常是最好的。

基本上,如果您计划进行比写入更多的阅读,则可以增加写入路径上的工作量以减少读取路径上的数量。