1

现在,我在我的选择查询中使用临时表来加快执行速度。每次我执行查询时都会创建它们。

在我目前的情况下,这些表每天只用新数据更新一次,所以我在想CREATE TEMPORARY TABLE,我将创建一个持久表,而不是使用 MySQL 的语句,这在某种意义上是临时的,因为它会被删除并且一天后重新创建。我可以在我完成更新主表之后用临时数据填充它。

或者,是否InnoDB's data buffer会足够聪明地缓存临时表本身的数据?

还是有另一种缓存临时表的方法?

我还发送了适当的缓存标头以及使用 AJAX 加载的数据以减少服务器负载,并且 AJAX 查询占发送到 mysql 的读取请求的大约 70%。

我在想什么只是浪费磁盘空间和表格永远不会以这种方式使用,还是对我的情况来说这是一个非常好的主意?

4

2 回答 2

2

我最近遇到了一个类似的问题,由于持续重用,CREATE TEMPORARY TABLE 的成本很高。我还使用了 Barranka 描述的解决方案(创建一次并在完成或重用之前截断)。

为了进一步提高性能,我使用了在 RAM 磁盘 (ramfs) 上创建的 InnoDB 表。这以非常低的 IO 成本提供了 InnoDB 存储引擎的所有优势。这是一个比使用 MEMORY 存储引擎更好的解决方案,根据 Oracle 支持,该引擎仅适用于遗留应用程序,并且有一段时间没有得到改进或扩展。

于 2014-03-30T23:42:10.730 回答
1

也许看看 MEMORY 存储引擎可能会有所帮助?我将这些用于每天一次密集查询中的一些接受数据,然后在短时间内密集使用 MEMORY 表。

http://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html

于 2013-06-08T16:33:28.160 回答