MySQL UNION ALL 太慢了

     2023-03-24     111

关键词:

【中文标题】MySQL UNION ALL 太慢了【英文标题】:MySQL UNION ALL is too slow 【发布时间】:2019-12-02 03:42:49 【问题描述】:

我在 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;

【问题讨论】:

我只能看到3张桌子 例如,我在这里只放了 3 张桌子。实际上它有超过 3 个表。 但是同样的查询在 MS SQL Server 中运行得更快。 你可以在你的 ms sql 上有索引 让我知道表格的结构 【参考方案1】:

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

虽然我没有找到任何令人满意的MySQLUNION ALL慢查询的解决方法。但是通过优化 MySQL 单个查询,我已经将它管理到了 80%。

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

【讨论】:

附带说明:包含导致性能提升的特定更改会很有用。否则不清楚。 @informatik01 感谢更新。我将尝试提及这些步骤。谢谢【参考方案2】:

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

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

【讨论】:

亲爱的 Vaibhav,我需要简单的查询而不是日志代码。感谢您的尝试。 你检查了吗,这个查询需要多长时间? 联合所有会减慢查询速度。因为当 mysql 执行联合查询时,它会在内存中创建一个表,然后合并结果。此时您的索引已消失。这就是您的查询变慢的原因。 你是对的,单个查询更快,因为它只会在你使用联合时给你结果,它几乎不需要在内部执行额外的工作。 没有索引是有用的。手动创建多个临时表更糟糕,而不是让 MySQL 创建单个临时表并附加到它,UNION ALL 就是这样做的。 (在版本 8 中,它甚至避免了临时表。)

MySQL查询太慢了

】MySQL查询太慢了【英文标题】:MySQLquerytoomuchslow【发布时间】:2019-05-1423:21:59【问题描述】:我正在尝试查询以获取一些趋势统计数据,但基准测试真的很慢。查询执行时间约为134秒。我有一个名为table_1的MySQL表。在create语句... 查看详情

优化我的mysql语句! - 兰德()太慢了

】优化我的mysql语句!-兰德()太慢了【英文标题】:Optimizingmymysqlstatement!-RAND()TOOSLOW【发布时间】:2010-12-0808:17:51【问题描述】:所以我有一个包含超过80,000条记录的表,这个表称为系统。我还有另一个名为follow的表。我需要... 查看详情

带有Left Join的Mysql查询太慢了

】带有LeftJoin的Mysql查询太慢了【英文标题】:MysqlquerywithLeftJoinistooveryslow【发布时间】:2011-03-1612:20:40【问题描述】:查询:select`r`.`id`as`id`from`tbl_rls`as`r`leftjoin`tblc_comment_manager`as`cm`on`cm`.`rlsc_id`!=`r`.`id`两个表都有8k条记录,但为... 查看详情

mysql中的union和union all有啥区别? [复制]

】mysql中的union和unionall有啥区别?[复制]【英文标题】:Whatisthedifferencebetweenunionandunionallinmysql?[duplicate]mysql中的union和unionall有什么区别?[复制]【发布时间】:2013-09-1201:05:37【问题描述】:谁能告诉我mysql在哪里使用union和在哪里... 查看详情

setFormulaArray 太慢了

】setFormulaArray太慢了【英文标题】:setFormulaArraytooslow【发布时间】:2021-06-0807:02:33【问题描述】:我正在尝试编写一个python包装器,该包装器旨在从csv(或mysql)读取多个记录并更新工作表预定义范围的值,该范围由值单元格和... 查看详情

Mysql UNION ALL 创建双记录

】MysqlUNIONALL创建双记录【英文标题】:MysqlUNIONALLcreatesdoublerecords【发布时间】:2019-02-0114:54:13【问题描述】:我有以下表格:平台:-------------------------------------------------------|id|team_id|name|url|logo--------------------------------------- 查看详情

MySQL 中的 UNION ALL 性能不佳

】MySQL中的UNIONALL性能不佳【英文标题】:PoorUNIONALLperformanceinMySQL【发布时间】:2016-08-0613:59:26【问题描述】:我有一个包含如下行的数据库:+------------+---------+------------+-------+|continent|country|city|value|+------------+---------+------------+-... 查看详情

MySQL UNION ALL 多重使用优化

】MySQLUNIONALL多重使用优化【英文标题】:MySQLUNIONALLMultipleusageoptimization【发布时间】:2021-08-1005:32:07【问题描述】:我在MySQL查询优化方面遇到问题。情况如下。SQL表中有超过200000行包含多列。我正在为这些数据在前端制作过滤... 查看详情

MySQL 中的 UNION ALL 和 LIMIT

】MySQL中的UNIONALL和LIMIT【英文标题】:UNIONALLandLIMITinMySQL【发布时间】:2010-10-2413:45:25【问题描述】:假设我要执行这个查询:(SELECTaFROMt1WHEREa=10ANDB=1)UNIONALL(SELECTaFROMt2WHEREa=11ANDB=2)UNIONALL(SELECTaFROMt3WHEREa=12ANDB=3)ORDERBYaLIMIT1000;如 查看详情

UNION ALL MYSQL 真的很慢

】UNIONALLMYSQL真的很慢【英文标题】:UNIONALLMYSQLisreallyslow【发布时间】:2020-12-2120:40:10【问题描述】:我在mysql中有一个带有2个selectfrom的查询。当我单独运行这些查询时,它们会在1秒内快速运行。但是当我将它们与unionall结合使... 查看详情

如何简化mysql中的多个UNION ALL?

】如何简化mysql中的多个UNIONALL?【英文标题】:HowtosimplifymultipleUNIONALLinmysql?【发布时间】:2021-02-2216:58:23【问题描述】:由于多个UNIONALL,我的查询变得非常庞大,任何人都可以帮我减少它。实际上有300多个UNIONALL。SELECTkeywords,... 查看详情

结合 UNION ALL 的表的 VIEW 的 MySQL 性能

】结合UNIONALL的表的VIEW的MySQL性能【英文标题】:MySQLperformanceofVIEWfortablescombinedwithUNIONALL【发布时间】:2014-03-2020:20:33【问题描述】:假设我在MySQL中有2个表:createtable`persons`(`id`bigintunsignednotnullauto_increment,`first_name`varchar(64),`sur 查看详情

臃肿的 UNION ALL 代码 (MYSQL)

】臃肿的UNIONALL代码(MYSQL)【英文标题】:BloatedUNIONALLcode(MYSQL)【发布时间】:2017-01-1219:44:34【问题描述】:我是自学SQL的,我有一些非常慢的杂乱代码。我在Tableau中可视化这些数据,我创建的视图变得如此缓慢,以至于我不得不... 查看详情

MySQL UNION ALL 性能调优

】MySQLUNIONALL性能调优【英文标题】:MySQLUNIONALLperformancetuning【发布时间】:2017-09-1807:24:31【问题描述】:SELECT`col1`FROM`tbl1`;--takes0.0022sSELECT`col1`FROM`tbl2`;--takes0.0017sSELECT`col1`FROM`tbl1`UNIONALL(SELECT`col1`FROM`tbl2`);--ta 查看详情

带你搞懂mysql中的union(all)limitexists关键字

...2.limit:分页查询全靠它1)对limit用法的一些说明①limit是MySQL中特有的,其他数据库中没有,不通用; 查看详情

在 MySQL 中使用 Union All 和 Order By

】在MySQL中使用UnionAll和OrderBy【英文标题】:UsingUnionAllandOrderByinMySQL【发布时间】:2012-10-1509:24:12【问题描述】:我有2张桌子:createtableadvertised_products(idint,titlevarchar(99),timestamptimestamp);insertadvertised_productsselect1,\'t1\',curd 查看详情

Mysql union all select问题

】Mysqlunionallselect问题【英文标题】:Mysqlunionallselectissue【发布时间】:2017-01-1021:49:06【问题描述】:我正试图找出我哪里出错了。我正在使用不同的Where语句从同一个表中加入多个选择语句,其中一个选择也是一个连接。我正在... 查看详情

mySQL INNER JOIN 和 UNION ALL

】mySQLINNERJOIN和UNIONALL【英文标题】:mySQLINNERJOINtogetherwithUNIONALL【发布时间】:2016-05-1913:04:59【问题描述】:如果日期和类别“栏”匹配,我有一个包含行分组的表,现在我需要INNERJOIN这些与另一个表并使用该表中的WHEREanswer=\'2\... 查看详情