【发布时间】: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