我刚迁移到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做过多少工作,因为我刚刚开始运作。我确实设置了从默认值增加日志..但就是这样。所以配置是开箱即用的。
谢谢!
答案 0 :(得分:2)
如果您使用默认配置,那么mysql将为所有innodb表使用单个表空间,这可能是创建临时表的速度相对较慢的原因。如果您有足够的可用内存,我建议您使用MEMORY(HEAP)存储引擎作为临时表。