【问题标题】:MySQL Create Table from QueryMySQL 从查询创建表
【发布时间】:2013-11-02 17:18:22
【问题描述】:

我有一张大表,其中包含本质上是日志条目的内容。对于我的大多数查询,我需要一个包含最新条目的表,因此我从以下查询创建了一个“视图”:

SELECT t1.store_id, t1.code_id, t1.working, t1.expiration, t1.details, t1.price
    FROM code_stores t1
    LEFT OUTER JOIN code_stores t2
    ON (t1.store_id = t2.store_id AND t1.code_id = t2.code_id AND t1.id < t2.id)
    WHERE t2.store_id IS NULL

然后我在查询中使用这个“视图”。不幸的是,这会导致查询缓慢,所以我想以某种方式缓存这个视图的结果。由于此视图每天只会更改几次(当我可以运行查询来更新缓存表时),我想创建一个临时表来存储此视图的结果,并全天更新。

我该怎么做呢?我阅读了有关物化视图的信息,但似乎它们不适用于 mysql。更多帮助将不胜感激。

【问题讨论】:

  • 为什么不添加索引?
  • 您是指为特定列添加索引吗?我已经将它们添加到任何使用“WHERE”或“JOIN ON”的地方,但性能仍然很差(每个查询 1 秒)。我尝试过使用“EXPLAIN”,但我一直在努力解决这个问题。我的想法是缓存这个视图可能会提高性能。
  • 看来我的问题是查询结果的数量。查询输出 >1000 行。如果我应用 LIMIT 20,它将查询时间减少到 13 毫秒。我想我只需要为此提供一个更好的结果页面,而不涉及显示 1000 行。
  • 尽管如此,我仍然想知道如何创建一个临时表,因为代码存储将从大约 1M 行增长到 100M 行,我想性能只会变得更糟。

标签: mysql view


【解决方案1】:

出于使用临时表的想法,我建议使用触发器,以便在每次code_store表更改时更新临时表。

【讨论】:

  • 我可以使用触发器,或者我可以在后端完成对完整表的更新后强制更新临时表。不管怎样,我仍然不确定如何创建一个像这样基于查询的临时表。
猜你喜欢
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2011-03-25
  • 2012-08-26
相关资源
最近更新 更多