【问题标题】:Oracle: Having join or simple from/where clause has no affect on performance?Oracle:加入或简单的 from/where 子句对性能没有影响?
【发布时间】:2013-12-05 10:04:58
【问题描述】:

我的经理刚刚告诉我,即使每个表中有数百万条记录,oracle 查询中的连接或 where 子句也不会影响性能。我只是对此不满意,想确认一下。
以下哪个查询在 oracle 和 postgresql 上的性能更好

1-

选择 a.name,b.salary,c.address
    从 a,b,c
    其中 a.id=b.id 和 a.id=c.id;

2-

选择 a.name,b.salary,c.address
    从一个
    在 a.id=b.id 上加入 b
    在 a.id=c.id 上加入 C;

我已经尝试在 postgresql 中解释一个小数据集,查询时间相同(可能是因为我只有几行),现在我无法访问 oracle 和实际数据库来分析真实环境中的解释。

【问题讨论】:

  • 我认为你在这里遗漏了一些基本的东西——你的两个查询都加入了三个表,并且以完全相同的方式——区别只是语法上的。 FROM a, b 在语义上与 FROM a CROSS JOIN b 相同。您的经理是正确的,只要查询计划相同,我希望性能相同(其他条件相同)。
  • @JeffreyKemp:: 我没有遗漏任何东西,只是想知道这两个查询在 oracle 中是否具有相同的性能?如果两者对 postgresql 的性能相同,是否相同?处理大型数据集时
  • @JeffreyKemp:: 表示加入或where子句不会影响oracle的性能?
  • 我不知道postgresql,但是在Oracle中,它们是相同的语句,只是语法不同。 FROM a JOIN b ON a.id=b.id 可能会被重写为 FROM a,b WHERE a.id=b.id;无论如何,它的含义完全相同。
  • 一般而言,ANSI 语法(JOIN 等)更可取,除非您使用的是非常旧的数据库版本。有些连接在旧语法中可能会很棘手,但使用 ANSI 语法更容易 - 例如外连接。

标签: oracle postgresql oracle11g


【解决方案1】:
  1. 使用JOINS 使代码更易于阅读,因为它是不言自明的。

  2. 速度上没有区别(我刚测试过),执行计划也一样

  3. 如果查询优化器工作正常,那么这些查询之间应该没有区别。 它们只是指定相同期望结果的两种方法。

【讨论】:

  • 因为这意味着 oracle/postgresql 中的连接只是为了便于阅读,我没有理解
  • 在 oracle 中我有超过 200 行的数据,当他们执行 exe 时我看不出有什么区别
  • 使用连接使代码更易于阅读,我通常总是使用它,因为语句的结构更好地描述了数据模型。但是,请注意,在更复杂的语句中使用 ANSI 样式的联接可能会对 PARSE 时间(而不是执行时间)产生重大缺陷,因为 Oracle 公司本身似乎将其测试重点放在 Oracle 样式的联接上。这尤其适用于外部连接。使用外部连接,您可能会遇到意外的全表扫描,而 Oracle 样式连接不会发生这种情况。特别是在与两个表进行外部联接时(这实际上是不可能使用 Oracle 样式的外部联接的)。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多