MySQL使用cron作业创建表或使用视图

问题描述:

我有许多复杂的查询,其结果存储在MySQL视图中。问题在于MySQL的观点在性能方面受到影响。MySQL使用cron作业创建表或使用视图

我成立了一个cron作业来填充标准表具有相同数据的看法填入:

DROP TABLE user_reports; 
CREATE TABLE user_reports 
    SELECT col1, col2, col3 FROM 
    /** COMPLEX QUERY **/ 
; 

现在,有关cron填充user_reports表进行查询时,查询几乎拿与同等视图相比,查询的时间的十分之一。

这是一种常用的方法吗?显然每次运行CRON作业时服务器都会有一些负担,这意味着数据不可用live。采取

时间查询user_reports =0.002秒
查询view_user_reports =0.018秒

所需的时间这一切说,也许一个查询,需要0.018秒运行应该从应用程序代码运行,而不是存储在视图中?虽然我认为它不会像Cron驱动的方法那样好。

+0

让我来澄清一下 - 你有一个基本上是多个表的各种联接的产物的视图。然后,你查询视图,它需要18毫秒,这不令人满意,所以你决定做什么?创建一个充满来自哪里的数据的新表?你怎么填他们的?您是否对说明中的查询运行了EXPLAIN,以查看瓶颈是什么?查询连接表总是比查询具有复杂WHERE子句的单个表慢。 – 2011-05-06 13:51:24

其中在被存储在MySQL视图

哦亲爱的结果。 MySQL视图不要存储数据。

DROP TABLE user_reports;

CREATE TABLE user_reports

...什么问题....

TRUNCATE TABLE user_reports; 

我不认为它会扩展以及cron的驱动方法

只有只要在cron作业的查询并不需要很长时间来运行 - 当它你需要开始考虑将数据逐步添加到预处理结果集中。但在0.018秒时,这只是过早的优化。

+0

感谢所以用这种方式预处理数据是很常见的。很高兴你评论了0.018秒,因为我不认为这是特别密集的。这对我在很多项目中都会有用。 – dianovich 2011-05-10 09:20:59

在大多数情况下,18 ms的数据库搜索不会对性能产生负面影响。如果是这样,那么通常使用某种缓存。如果你需要能够对数据进行搜索,并且没有问题,如果数据太旧了,那么你的方法是好的。

如果您不需要能够搜索数据,那么可以将缓存直接存储在内存或文件中,最好采用与传送到客户端相同的格式。