在MySQL存储过程中,在结尾处删除临时表

11

即使在存储过程的开头已经有检查,我是否需要在结尾处添加DROP TEMPORARY TABLE IF EXISTS data;?这样做会对性能产生影响吗?

CREATE DEFINER=`TEST`@`%` PROCEDURE `TEST`() BEGIN

    DROP TEMPORARY TABLE IF EXISTS data;

    CREATE TEMPORARY TABLE data AS 
...


END;
1个回答

15

在MySQL中,临时表会在数据库连接关闭时自动删除。如果您计划在存储过程之后保持连接处于打开状态,则临时表将一直存在于磁盘上,直到该连接被关闭。性能影响取决于许多因素,例如您如何配置服务器上的临时表存储,表中有多少数据等。

最佳实践是在完成使用临时表后立即将其删除。这样可以彻底避免潜在的性能问题。


如果您正在使用连接池呢? - Mike Flynn
4
如果您正在使用连接池,很可能表不会自动被删除。这更说明在完成使用后明确地将其删除的必要性。 - EkoostikMartin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接