我有许多复杂的查询,其结果存储在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驱动的方法。
答案 0 :(得分:1)
在大多数情况下,18 ms数据库搜索不会对性能产生负面影响。如果是,那么通常使用某种缓存。如果您需要能够对数据进行搜索,并且如果数据有点旧,那就没问题,那么您的方法很好。
如果您不需要能够搜索数据,则缓存可以直接存储在内存或文件中,最好采用与传送给客户端相同的格式。
答案 1 :(得分:1)
亲爱的,亲爱的。 MySQL视图不存储数据。其结果存储在MySQL视图中
DROP TABLE user_reports;
CREATE TABLE user_reports
...... ......出了点问题....
TRUNCATE TABLE user_reports;
我认为它的扩展性不如cron驱动的方法
只要cron作业中的查询不需要很长时间才能运行 - 当它发生时,您需要开始考虑将数据逐步添加到预处理结果集中。但是在0.018秒时,这只是过早的优化。