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 从查询创建表的主要内容,如果未能解决你的问题,请参考以下文章

如何为mysql中的现有表创建索引?

从另一个表创建表 - MYSQL 到 MSSQL 的转换

MySQL多表查询

如何创建表在Mysql中使字段从某一个数开始自增

SQL临时表使用

如何使用 python 从 .sql (mysqldump) 文件中执行“创建表查询”