哪个查询有更好的性能?

kau*_*nav 5 sql oracle oracle11g query-performance

SELECT *
FROM { SELECT * FROM BigMillionTable UNION ALL SELECT * FROM SmallTensTable } 
WHERE (some_condition)
Run Code Online (Sandbox Code Playgroud)

VS

SELECT * 
FROM BigMillionTable 
WHERE (some_condition)

UNION ALL

SELECT * 
FROM SmallTensTable
WHERE (some_condition) 
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 第一个查询是否需要将所有行放在 BigMillionTable主内存中才能执行UNION ALL
  2. 哪个查询提供更好的性能?

Sus*_*rma 0

where 条件实际上是在选择之前执行的,因此在第二个查询中,您仅在较小的集合上执行并集,因此应该更快。

在第一个查询中,内部查询将首先运行,它将对整个表进行并集,然后在选择记录之前执行 where 。

所以是的,与第一个相比,第二个会提供更好的性能

  • 您的建议可能适用于某些 RDBMS,甚至适用于 Oracle 的某些旧版本。腾讯版本可以执行“查询转换”来避免此类问题,因此您应该在发布之前对其进行测试并提供有关差异的证据。 (3认同)