如何存储SQL查询结果以进行快速访问?
SQL初学者在这里。如何存储SQL查询结果以进行快速访问?
我有一个需要大约10秒钟才能运行的查询,所以我们在应用程序中放慢了速度。
在MySQL或更一般的SQL中,服务器可以定期(每1到5分钟)运行一次查询并将其存储在某处,以便我可以查询此“缓存”表以便于访问吗?
非常感谢提前!
最有可能取决于您的查询是什么,您可以通过在您的表上创建缺失索引来加快查询速度。将EXPLAIN EXTENDED放在查询之前,查看它正在使用哪些索引,并尝试确定应对哪些列进行索引。应该编入索引的列是where语句中的列,以及连接中使用的任何字段。如果您提供查询和表格架构,我们可能会帮助推荐一些索引。
虽然可能有很多方法每隔5分钟运行一个进程来填充临时表(cron作业,计划任务,从应用程序运行一个线程),但您最好先用尽索引选项采取这种可能只是使用更多资源的激烈措施。并不一定会提高应用程序的性能。
您的应用程序可能有一个唤醒的线程,查询是否将结果保存到临时表中,并且应用程序的其余部分仅使用临时表。
在MySQL中没有这样的调度规定。
但是,您可以始终运行预定作业(通过Windows上的at
/scheduler,cron或您在Unix上使用的任何调度系统)来执行此类“执行并将结果插入登台表”查询/过程。
除了你的直接问题,还要考虑优化查询 - 如果你还没有这样做,那么对索引和/或重新设计表的审慎应用可能会加快它的速度(但我完全承认一些查询已尽可能优化)
另一种解决方案是流式传输/分块 - 让应用根据需求检索“接下来的N行”。
另外,考虑将查询结果缓存在应用程序本身而不是DB中 - 这种方式缓存不需要数据库访问,甚至更快。
授予此解决方案现在可能超出您的范围。您可以使用ORM框架为您执行缓存。基本上你要求的是为你的结果提供缓存解决方案。缓存解决方案可能因您使用的供应商和语言而异。
发布查询,虽然性能不好表示有问题的数据模型... – 2009-11-04 02:48:12