如何存储SQL查询结果以便快速访问?

时间:2009-11-04 02:32:45

标签: sql mysql multiplatform

SQL初学者。

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

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

非常感谢提前!

4 个答案:

答案 0 :(得分:4)

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

虽然可能有很多方法每5分钟运行一个进程来填充临时表(cron作业,计划任务,从你的应用程序运行一个线程),你可能最好还是在用完之前耗尽索引选项像这样的激烈措施,可能只是使用更多的资源。并且可能不一定会提高您的申请表现。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

另一个解决方案是流媒体/分块 - 让应用根据需要/需要检索“下N行”。

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

答案 3 :(得分:0)

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