我正在优化一个涉及UNION ALL
两个查询的查询。
两种查询都经过优化,并且分别在不到一秒的时间内运行。
但是,当我执行两者的并集时,计算所有内容大约需要30秒。
我不打扰您使用特定查询,因为它们已经过优化,所以让我们称之为Optimized_Query_1
和Optimized_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在内存中创建了一个临时表,然后从那里得到最终结果,有什么方法可以解决这个问题吗?
由于
答案 0 :(得分:2)
您无法优化UNION ALL
。它只是将两个结果集叠加在一起。与需要额外步骤以删除重复项的UNION
相比,UNION ALL
是两个结果集的直接堆叠。 ORDER BY
可能需要额外的时间。
您可以尝试从此查询中创建VIEW
。