sql - View 是否比 Oracle 中的自然连接更快? postgresql 呢?

标签 sql oracle postgresql oracle9i

SELECT cec.*
  FROM mam.category cec


SELECT cec.year, ces.*
  FROM mam.subcategory ces
  JOIN mam.category cec ON CEC.CATEGORY_ID = CES.CATEGORY_ID


SELECT cec.year, ceo.*
  FROM mam.options ceo
  JOIN mam.subcategory ces ON CES.SUBCATEGORY_ID = CEO.SUBCATEGORY_ID
  JOIN olr.iep_cost_est_category cec ON CEC.CATEGORY_ID = CES.CATEGORY_ID

据一位 friend 说,出于缓存目的,oracle 中的 View 实际上更快。这是真的? postgresql 呢?我试过 google 和 stackoverflow(最接近的是 MS SQL)。

最佳答案

观看次数

Views,即非物化 View ,不被缓存。它们只是一个准备好的 SQL 语句,运行时代替查询中的 View 引用。将它们想象成宏,或保存 View 中包含的 SELECT 语句的变量。

物化 View (PostgreSQL 不支持)类似于表,因为它们可以被索引。但众所周知,物化 View 在支持的范围内受到限制(即:没有非确定性值)。

自然连接

您发布的示例都不是自然 JOIN,它们看起来像这样:

      SELECT cec.year, ces.*
        FROM mam.subcategory ces
NATURAL JOIN mam.category cec

语法不受欢迎(尽管是 ANSI),因为它充其量是模棱两可的,并且在以下情况下会让您面临问题:

  • 列被添加或重命名
  • 使用此方法最多只能连接两个表
  • 如果列以不寻常的方式跨表连接,您几乎无法控制连接的细节。连接标准是什么并不明显 - 显式既可读又保证一致的结果。

结论

非物化 View 在很大程度上与 JOIN 语法无关。数据和索引将对性能产生更大的影响。

关于sql - View 是否比 Oracle 中的自然连接更快? postgresql 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754289/

相关文章:

sql - db2 中的 Listagg 替代方案

sql - SELECT 语句期间触及的表/列的列表

regex - Oracle - PCRE 到 Oracle REGEX

sql - 条件排名

postgresql - 如何使 SchemaCrawler 在 Windows 中工作?

python - postgresql(aws redshift) 错误1204 String length exceeds DDL length

sql - 获取最后一个插入 ID 的标准方法是什么?

SQL:使用 CASE 将一个表中的记录与另一个表中的记录连接起来

oracle - 优化器使用错误的索引

sql - 检查postgresql中的重复记录