【发布时间】:2017-01-09 02:36:22
【问题描述】:
查询 A 和查询 B 有什么区别。table_a 和 table_b 都有 700k+ 条记录。我可以看到的明显区别是速度(性能)。此外,我们的 Oracle 顾问倾向于使用 Query B 编写 sql 脚本。
Query A
select *
from table_a a
inner join table_b b
on a.id = b.id
Query B
select *
from table_a a,table_b b
where a.id = b.id
【问题讨论】:
-
不同之处在于,第一个是现代、健壮的连接方式。第二个是旧的、过时的和脆弱的写连接方式
-
...我不希望两者之间有性能差异,因为任何相当强大的 SQL 引擎都应该为两者生成相同的执行计划。
-
如果您运行每个查询一次,您可能会看到性能差异 - 数据块缓存可以使您运行的第二个查询看起来更快,因为它可以从内存中获取所有内容并且不必再次访问磁盘.如果您多次运行这两个查询,则后续运行应该是相同的。还要查看执行计划,看看他们都在做什么——应该是一样的。
-
我能看到的明显区别是速度(性能):是什么给了你这种(不正确的)印象?