【发布时间】:2013-06-04 18:06:11
【问题描述】:
现在,我在选择查询中使用临时表来加快执行速度。每次执行查询时都会创建它们。
在我目前的情况下,表每天只更新一次新数据,所以我在想,我将创建一个持久表,而不是使用 MySQL 的 CREATE TEMPORARY TABLE 语句,从某种意义上说是 temporary,因为它会在一天后被删除并重新创建。在我完成更新主表之后,我可以用 临时 数据填充它。
或者,InnoDB's data buffer 是否足够聪明,可以缓存临时表本身的数据?
或者还有其他缓存临时表的方法吗?
我还发送了适当的缓存标头以及使用 AJAX 加载的数据以减少服务器负载,并且 AJAX 查询占发送到 mysql 的读取请求的大约 70%。
我的想法只是浪费磁盘空间,而表永远不应该以这种方式使用,还是对我的情况来说这是一个非常好的主意?
【问题讨论】:
-
在多用户环境中,临时表不是一个好主意,因为它们只对创建它们的连接可见。我建议您为当天创建“真实”表,并在每天结束时使用“截断表”,在您将数据保存到持久表之后
-
是的,我也是这么想的,因为临时表的数据一天都不会改变!
-
另一个细节...如果数据非常不稳定并且主要任务是添加数据,我建议您使用 MyISAM 表,因为它们对于此类任务更快(当然,您必须做一些额外的工作来保持参照完整性,但也许额外的速度是值得的)
-
让 MySQL 做缓存。它应该足够聪明,可以缓存经常请求的内容。
标签: mysql sql innodb temp-tables