MySQL使用cron作业创建表或使用Views

时间:2011-05-06 13:39:13

标签: mysql sql database database-optimization

我有许多复杂的查询,其结果存储在MySQL视图中。问题是MySQL的观点在性能方面受到了影响。

我设置了一个cron作业来填充标准表,其中包含填充视图的相同数据:

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

现在,在对cron-filled的user_reports表进行查询时,与同等视图相比,查询几乎占用了十分之一的时间来查询

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

  

查询user_reports = 0.002秒的时间   查询view_user_reports = 0.018秒所花费的时间

这一切都说,也许运行0.018秒的查询应该从应用程序代码运行,而不是存储在视图中?虽然我认为它的扩展性不如cron驱动的方法。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

  

其结果存储在MySQL视图中

亲爱的,亲爱的。 MySQL视图不存储数据。

  

DROP TABLE user_reports;

     

CREATE TABLE user_reports

...... ......出了点问题....

TRUNCATE TABLE user_reports;

  

我认为它的扩展性不如cron驱动的方法

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