Innodb和临时表

Don*_*ool 9 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)
);
Run Code Online (Sandbox Code Playgroud)

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

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

任何人都知道为什么Innodb需要这么长时间来创建这些临时表?也许使用默认存储引擎创建临时表是某种巨大的禁忌?

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

谢谢!

nni*_*ols 2

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