Mysql 一切都太慢了

Mysql 一切都太慢了,mysql,performance,union,union-all,Mysql,Performance,Union,Union All,我在MySQL中有一个来自4个表的查询。当我单独运行这些查询时,它们会在1秒内快速运行 但是,当我使用UNION-ALL组合它们时,机器的负载很重,在UNION-ALL中进行相同的查询至少需要10秒钟。我已经翻遍了整个互联网,包括YouTube,但不幸的是,我还没有找到任何解决方案 请告知。 谢谢 code SELECT * FROM ( SELECT id, sessionId FROM promotion UNION ALL SELECT id, sessionId

我在MySQL中有一个来自4个表的查询。当我单独运行这些查询时,它们会在1秒内快速运行

但是,当我使用
UNION-ALL
组合它们时,机器的负载很重,在
UNION-ALL
中进行相同的查询至少需要10秒钟。我已经翻遍了整个互联网,包括YouTube,但不幸的是,我还没有找到任何解决方案

请告知。
谢谢

code

SELECT *
FROM (
    SELECT id, sessionId FROM promotion
    UNION ALL
    SELECT id, sessionId FROM transport_details
    UNION ALL
    SELECT id, sessionId FROM fee_details
) a;

通过创建一个临时表并向其添加索引,将解决您的问题

id int(11),
sessionId varchar(255),
key id(id)
);

insert into tbl1 (id,sessionId)
select id, sessionId from promotion;

create temporary table tbl2(
id int(11),
sessionId varchar(255),
key id(id)
);
insert into tbl2 (id,sessionId)
select id, sessionId from transport_details;


create temporary table tbl3(
id int(11),
sessionId varchar(255),
key id(id)
);
insert into tbl3 (id,sessionId)
select id, sessionId from fee_details;

select * from tbl1 union all 
select * from tbl2 union all
select * from tbl3

感谢所有参与我提问的开发者

虽然我没有找到MySQL
UNION-ALL
slow查询的任何令人满意的解决方案。但我通过优化MySQL的单个查询将其管理到了80%


此外,还有一项增加内存和CPU限制的规定。

我只能看到3个表,例如,我在这里只放了3个表。实际上,它有3个以上的表。但是同一个查询的运行速度与MS SQL Server相同。您可以在MS SQL Server上使用索引让我知道表的结构亲爱的Vaibhav,我需要简单的查询而不是日志代码。谢谢您的尝试。您是否检查了,此查询需要多少时间?union all会减慢查询速度。因为当mysql执行联合查询时,它会在内存中创建一个表,然后合并结果。此时您的索引消失了。这就是查询速度变慢的原因。您是对的,单个查询速度更快,因为当您使用union时,它只会给您提供结果。它只需要在内部执行很少的额外工作。没有索引是有用的。手动创建多个临时表比让MySQL创建一个临时表并附加到其中更糟糕,而这正是UNION ALL所做的。(在版本8中,它甚至避免了temp表。)作为旁注:包含导致性能提高的特定更改将非常有用。否则不清楚。@informatik01谢谢更新。我将尽量提及这些步骤。谢谢