【问题标题】:What else are the differences in writing queries [duplicate]编写查询还有什么区别[重复]
【发布时间】: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 引擎都应该为两者生成相同的执行计划。
  • 如果您运行每个查询一次,您可能会看到性能差异 - 数据块缓存可以使您运行的第二个查询看起来更快,因为它可以从内存中获取所有内容并且不必再次访问磁盘.如果您多次运行这两个查询,则后续运行应该是相同的。还要查看执行计划,看看他们都在做什么——应该是一样的。
  • 我能看到的明显区别是速度(性能):是什么给了你这种(不正确的)印象?

标签: sql oracle


【解决方案1】:

第二个查询更多地使用关系模型(不再推荐。)概念,而第一个查询符合 ANSI 且更具可读性。

虽然这篇文章是 Aaron 在 SQL Server 中的文章,但它提供了关于旧做法的有用见解:Bad habits to kick : using old-style JOINs

【讨论】:

  • 第二个也是 ANSI 兼容的(尽管是一个非常古老的 ANSI 标准)
猜你喜欢
  • 2016-02-15
  • 2016-05-06
  • 2018-10-31
  • 1970-01-01
  • 2014-11-08
  • 2014-10-12
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
相关资源
最近更新 更多