7

我正在优化一个涉及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 在内存中创建了一个临时表,然后从中给出最终结果,有没有办法解决这个问题?

谢谢

4

1 回答 1

2

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

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

于 2013-05-31T15:44:44.620 回答