MySQL联合所有性能调整
为什么MySQL联合所有性能调整,mysql,query-optimization,union-all,Mysql,Query Optimization,Union All,为什么UNION ALL工作缓慢 使用UNION ALL?的任何其他替代方法是否已打开?这可能是由于从QC获取结果集,两个单独的选择人为快速 让我们剖析一下联合体,了解它的惰性: 为结果集创建临时表 首先执行选择,将结果写入该温度 执行第二次选择,将结果写入该温度 阅读临时表格 (重复数据消除。自从您在UNION上说ALL后,就没有发生这种情况) 将结果交付给客户 放下临时表 有两件事可能使情况恶化: Windows在构建表时比*NIX慢 直到MySQL的最新版本,一些联合才能避免临时表。也就
UNION ALL
工作缓慢
使用UNION ALL
?的任何其他替代方法是否已打开?这可能是由于从QC获取结果集,两个单独的选择人为快速
让我们剖析一下联合体
,了解它的惰性:
为结果集创建临时表
首先执行选择,将结果写入该温度
执行第二次选择
,将结果写入该温度
阅读临时表格
(重复数据消除。自从您在UNION
上说ALL
后,就没有发生这种情况)
将结果交付给客户
放下临时表
有两件事可能使情况恶化:
- Windows在构建表时比*NIX慢
- 直到MySQL的最新版本,一些
联合才能避免临时表。也就是说,在将来,每个SELECT
的结果都可以直接交付给客户机。你显然没有这样的版本
至于括号,请保持打开状态。把它们放在另一个上,也选择。它不会影响性能,但可能会影响结果。例如,想象一下在这三种情况下,groupby
适用于什么:
SELECT `col1` FROM `tbl1`; -- takes 0.0022s
SELECT `col1` FROM `tbl2`; -- takes 0.0017s
SELECT `col1` FROM `tbl1`
UNION ALL
(SELECT `col1` FROM `tbl2`); -- takes 0.1100s
第一个与第二个相同,而不是第三个。为您的查询提供解释计划避免在第二个周围使用()select@scaisEdge没关系,移除后返回相同的输出成本相同time@MKhalidJunaid你能详细说明一下吗?我曾经使用explain-sql,但我想知道为什么union都会减慢两个sql的速度,@MD.KamruzZamanRana要知道原因,首先需要了解一下
-- Case 1
SELECT .. UNION SELECT .. GROUP BY ..
-- Case 2
SELECT .. UNION ( SELECT .. GROUP BY .. )
-- Case 3
( SELECT .. ) UNION ( SELECT .. ) GROUP BY ..