MYSQL临时表 - 如何查看活动表

时间:2011-08-17 12:24:24

标签: mysql mysql-management temp-tables

我们公司有一个简单的“crm-like”软件。有一些复杂的查询花了一些时间,每日使用查询...所以我正在测试一些修改,以使用临时表来替换我们需要的所有复杂的连接和子查询。

到目前为止进展非常顺利,速度达到了90%。

由于它是一个网络应用程序(codeigniter + mysql),我计划将其置于“生产测试”环境中,因此50%的用户可以帮我测试它。我想监视活动的表,如果可能的话,监视每个连接。

我的问题是 - 有什么办法可以查看mysql实例中活动的所有TEMPORARY TABLES吗?也许查看它的数据?

我读了一些关于插件或类似的东西,但这篇文章太乱了,我很理解。

非常感谢和抱歉我的英语 - 而不是我的母语。

4 个答案:

答案 0 :(得分:3)

临时表=临时,在查询后立即删除

没有直接解决方案,除了记录所有查询并逐个执行以检查哪个查询需要tmp_table

Created_tmp_tables这样的系统变量可能会提供一些想法

mysql> show status like '%tmp%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0     |
| Created_tmp_files       | 0     |
| Created_tmp_tables      | 0     |
+-------------------------+-------+

答案 1 :(得分:1)

临时表的一个问题实际上是跟踪用法,然后是创建,索引和删除它们的开销 - 特别是对于临时表的生命周期通常与HTTP的生命周期一样长的Web应用程序请求。

如果预编译结果(即物化视图)将是有益的,我设置一个常规表,添加引用MySQL连接id / web会话id /源查询+生成时间的字段取决于数据的TTL以及是否共享。

除了详细跟踪表的使用情况之外,它还可以更轻松地解决查询调优问题,当然,模式可以更好地记录。

答案 2 :(得分:-1)

当您的数据集变大时,临时表将无法帮助您。最后,他们如何帮助?在计算结果后,必须将数据复制到这些表中,为什么不用memcached缓存结果?

此外,我已经看到数据库有点大(几十千兆字节)并且正在运行一台机器并且查询运行得很快。您是否正确配置了数据库服务器(软件和硬件)存在疑问。您可能正在经历临时加速,但不能保证它会永久工作。我将优化运行应用程序所需的应用程序,查询,软件和硬件,然后使用memcache缓存结果,除非您需要查询结果的最新热门复制。

答案 3 :(得分:-1)

我认为在查看临时表时没有意义,因为它们在连接期间存在并且在关闭连接后死亡。但临时表有一个重要的事实。因此,如果在脚本中使用持久连接,临时表将在此连接的生命周期中存在,并且使用此连接的客户端将访问相同的临时表。同样在这种情况下,临时表将消耗系统资源。为了避免它,你应该在运行查询必要的查询后手动删除临时表,该查询使用了这个临时表。