【发布时间】: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 行,我想性能只会变得更糟。