如何提高UNION ALL的MYSQL性能?

jon*_*ira 7 mysql optimization performance

我正在优化一个涉及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
Run Code Online (Sandbox Code Playgroud)

我确实要求结果按顺序排列,但我发现无论有没有ORDER BY,查询都需要花费尽可能多的时间,所以不应该有任何区别.

显然UNION ALL在内存中创建了一个临时表,然后从那里得到最终结果,有什么方法可以解决这个问题吗?

谢谢

Ker*_*mit 2

你无法优化UNION ALL。它只是将两个结果集堆叠在一起。与UNION需要额外步骤来删除重复项相比,UNION ALL直接堆叠两个结果集。这ORDER BY可能需要额外的时间。

您可以尝试创建一个VIEW此查询。