gpt4 book ai didi

mysql - Innodb 和临时表

转载 作者:可可西里 更新时间:2023-11-01 06:30:50 24 4
gpt4 key购买 nike

我刚刚迁移到 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 中创建这些临时表需要这么长时间吗?也许使用默认存储引擎创建临时表是某种巨大的禁忌?

我没有对 my.cnf 做太多事情,因为我只是启动并运行。我确实设置了从默认值增加日志……但仅此而已。因此配置是开箱即用的。

谢谢!

最佳答案

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

关于mysql - Innodb 和临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9962905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com