Innodb&临时表

时间:2012-04-01 08:15:24

标签: mysql

我刚迁移到mysql 5.5.20并且我遇到了临时表的性能问题。我有一个存储过程,创建其中的八个,类似于:

create temporary table t_opened_today
(
    portfolio_id        integer,
    position_type_id    tinyint,
    open_value          decimal(12,2),
    today_net           decimal(12,2)
);

在Mysql 5.5上,它将Innodb作为默认存储引擎。我曾经在5.1,而事实并非如此。所以,它正在用Innodb创建临时表。我通过查看/ tmp验证了这一点,并没有看到任何.MYI或.MYD。这需要0.50秒(或更多,执行时间在整个地方反弹),这是荒谬的。

所以,我修改了表定义以包含“Engine = MyISAM”,并且花了0.00秒(正如人们所期望的那样)除了创建8个临时表并退出之外什么都不做。

任何人都知道为什么在Innodb中创建这些临时表需要这么长时间?也许使用default-storage-engine创建临时表是某种巨大的禁忌?

我没有对my.cnf做过多少工作,因为我刚刚开始运作。我确实设置了从默认值增加日志..但就是这样。所以配置是开箱即用的。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您使用默认配置,那么mysql将为所有innodb表使用单个表空间,这可能是创建临时表的速度相对较慢的原因。如果您有足够的可用内存,我建议您使用MEMORY(HEAP)存储引擎作为临时表。