现在,我在我的select查询中使用临时表来加速执行。每次执行查询时都会创建它们。
在我目前的情况下,这些表每天只更新一次新数据,所以我认为不是使用MySQL的CREATE TEMPORARY TABLE
语句,而是创建一个持久表,从某种意义上讲,它将是临时因为它会被删除并在一天后重新创建。在我完成主表更新后,我可以用临时数据填充它。
或者,InnoDB's data buffer
是否足够聪明,可以缓存临时表本身的数据?
还是有另一种缓存临时表的方法吗?
我还发送了适当的缓存标头,其中包含使用AJAX加载的数据以减少服务器负载,而AJAX查询占发送到mysql的读取请求的大约70%。
我在想什么只是简单地浪费磁盘空间而且桌子永远不会以这种方式使用,或者对我的情况来说这是一个非常明智的想法?
答案 0 :(得分:2)
我最近遇到了类似的问题,由于持续重用,CREATE TEMPORARY TABLE的成本很高。我还使用了Barranka描述的解决方案(创建一次并在完成时或在重用之前截断)。
为了提高性能,我使用了在RAM磁盘(ramfs)上创建的InnoDB表。这提供了InnoDB存储引擎的所有优势,而且IO成本非常低。这是一个比使用MEMORY存储引擎更好的解决方案,据Oracle支持,该引擎仅适用于传统应用程序,并且在一段时间内未得到改进或扩展。
答案 1 :(得分:1)
也许看看MEMORY存储引擎可能会有所帮助?我每天一次使用这些来进行密集查询的一些接受数据,然后在短时间内密集使用MEMORY表。
http://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html