MySQL 从查询创建表
Posted
技术标签:
【中文标题】MySQL 从查询创建表【英文标题】:MySQL Create Table from Query 【发布时间】: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 行,我想性能只会变得更糟。 【参考方案1】:出于使用临时表的想法,我建议使用触发器,以便在每次code_store表更改时更新临时表。
【讨论】:
我可以使用触发器,或者我可以在后端完成对完整表的更新后强制更新临时表。不管怎样,我仍然不确定如何创建一个像这样基于查询的临时表。以上是关于MySQL 从查询创建表的主要内容,如果未能解决你的问题,请参考以下文章