Oracle View 与 Oracle 中的联接表

Oracle View vs joining tables in Oracle

我了解视图是 Oracle 中基础 table 或一组 table 的 window。例如,如果我有一个通过连接多个 tables 创建的视图,当我从视图中获取 select 数据时,视图是否会执行实际的连接操作?一个视图的性能是否优于连接多个 table 以获取数据,还是在性能方面相同?

单个查询与使用视图的逻辑等效查询之间通常没有性能差异。

Oracle 具有可以将视图与外部查询相结合的优化器转换;谓词推送、简单和复杂的视图合并等。将视图更像是构建大型查询的文本宏,而不是 return 行的函数。

例如,在下面的查询中,Oracle 可能足够聪明,可以将主键列上的谓词推送到视图中。虽然视图本身可能 return 数百万行,但当整个查询是 运行 时,Oracle 将首先在主键列上应用谓词。

select *
from view_returns_millions_of_rows
where primary_key_value = 1;