[英]MySQL UNION ALL performance tuning
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
为什么UNION ALL
工作缓慢?
使用UNION ALL
任何其他选择?
查询缓存是否打开? 由于从 QC 获得结果集,两个单独的SELECTs
可能人为地快速。
让我们剖析UNION
以了解它的迟钝:
SELECT
,将结果写入该临时文件。SELECT
,将结果写入该临时文件。UNION
上说ALL
后就没有发生这种情况。)有两件事可能使情况恶化:
UNIONs
可以避免临时表。 也就是说,将来每个SELECT
的结果都可以直接传递给客户端。 你显然没有这样的版本。 至于括号,保留它们。 也将它们放在另一个SELECT
。 它不会影响性能,但可能会影响结果。 想象一下,例如, GROUP BY
在这三种情况下适用于什么:
-- Case 1
SELECT .. UNION SELECT .. GROUP BY ..
-- Case 2
SELECT .. UNION ( SELECT .. GROUP BY .. )
-- Case 3
( SELECT .. ) UNION ( SELECT .. ) GROUP BY ..
第一个与第二个相同,而不是第三个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.