0

SQL初学者在这里。

我有一个大约需要 10 秒才能运行的查询,因此我们的应用程序速度变慢了。

是否有可能在 MySQL 或更一般地在 SQL 中让服务器定期(每 1 到 5 分钟)运行查询并将其存储在某处,以便我可以查询这个“缓存”表以便于访问?

提前谢谢了 !

4

4 回答 4

4

很可能取决于您的查询是什么,您可以通过在表上创建缺失的索引来加快查询速度。将EXPLAIN EXTENDED放在查询前面以查看它正在使用哪些索引,并尝试找出应该索引哪些列。应该索引的列是 where 语句中的列,以及连接中使用的任何字段。如果您提供查询和表架构,我们可能会帮助推荐一些索引。

虽然可能有很多方法可以每 5 分钟运行一个进程来填充临时表(cron 作业、计划任务、从您的应用程序运行一个线程),但在采取诸如此类的严厉措施之前,您最好先用尽索引选项像这样,这可能只是使用更多的资源。并且不一定会提高您的应用程序的性能。

于 2009-11-04T02:36:39.230 回答
1

您的应用程序可能有一个线程唤醒、执行查询、将结果保存到临时表中,而应用程序的其余部分将只使用临时表。

于 2009-11-04T02:35:07.783 回答
0

当然,这个解决方案现在可能超出了您的范围。您可以使用 ORM 框架为您执行缓存。基本上,您要求的是为您的结果提供缓存解决方案。缓存解决方案可能因您使用的供应商和语言而异。

于 2009-11-04T02:51:52.203 回答
0

MySQL 中没有这样的调度规定。

但是,您始终可以运行计划作业(通过atWindows 上的 /scheduler、cron 或您在 Unix 上使用的任何计划系统)来执行这样的“执行并将结果插入临时表”查询/过程。

除了您的直接问题之外,还要考虑优化查询 - 如果您尚未这样做,明智地应用索引和/或重新构建表可能会加快速度(但我完全承认某些查询已优化为最好的)

另一个解决方案是流式传输/分块 - 让应用程序按需/需要检索“下 N 行”。

此外,考虑将查询结果缓存在应用程序本身而不是数据库中 - 这样缓存不需要数据库访问,甚至更快。

于 2009-11-04T02:36:52.560 回答