【问题标题】:How to improve MYSQL performance on UNION ALL?如何提高 UNION ALL 上的 MYSQL 性能?
【发布时间】:2013-05-31 15:41:32
【问题描述】:

我正在优化一个涉及两个查询的UNION ALL 的查询。 两个查询都经过优化,分别运行不到一秒。 但是,当我执行两者的并集时,计算所有内容大约需要 30 秒。

我不会用具体的查询来打扰你,因为它们会随着它们得到优化,所以我们称它们为 Optimized_Query_1Optimized_Query_2

Optimized_Query_1 的行数大约为 100K

Optimized_Query_2 的行数大约为 200K

SELECT * FROM (
   Optimized_Query_1
UNION ALL
   Optimized_Query_2
) U 
ORDER BY START_TIME ASC

我确实要求结果是有序的,但我发现无论最后是否有 ORDER BY,查询都会花费尽可能多的时间,所以应该没有区别。

显然 UNION ALL 在内存中创建了一个临时表,然后从中给出最终结果,有没有办法解决这个问题?

谢谢

【问题讨论】:

    标签: mysql performance optimization


    【解决方案1】:

    您无法优化UNION ALL。它只是将两个结果集堆叠在一起。与UNION 相比,UNION ALL 是两个结果集的直接堆叠。 ORDER BY 可能需要更多时间。

    您可以尝试从此查询中创建VIEW

    【讨论】:

    • 如果我删除 ORDER BY 计算查询的总时间需要同样多的时间。创建 VIEW 有什么帮助?
    • @jonasMcFerreira 看看this discussion
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2012-09-05
    • 1970-01-01
    • 2014-09-01
    相关资源
    最近更新 更多