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