0

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

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

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

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

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

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

综上所述,也许一个需要 0.018 秒才能运行的查询应该从应用程序代码中运行,而不是存储在视图中?尽管我认为它的扩展性不如 cron 驱动的方法。

4

2 回答 2

1

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

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

于 2011-05-06T13:45:19.950 回答
1

结果存储在 MySQL 视图中

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

删除表用户报告;

创建表 user_reports

……有什么不对……

TRUNCATE TABLE user_reports;

?

我认为它不会像 cron 驱动的方法那样扩展

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

于 2011-05-06T14:35:20.537 回答