首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle9i中ANSI连接性能差的原因

Oracle9i中ANSI连接性能差的原因
EN

Stack Overflow用户
提问于 2015-10-08 13:19:34
回答 1查看 317关注 0票数 1

请在标记为重复之前,请阅读最后几段.

在Oracle9i数据库中,此查询以0.18秒运行。

代码语言:javascript
复制
select
    count(*)
from 
    dba_synonyms s,dba_objects t
where
    s.TABLE_OWNER = t.OWNER(+) and
    s.TABLE_NAME = t.OBJECT_NAME(+) and
    s.DB_LINK is null and
    t.OWNER is null;

...but这一个运行在一个可怕的120秒!:

代码语言:javascript
复制
select
    count(*)
from 
    dba_synonyms s left join dba_objects t 
                   on ( s.TABLE_OWNER = t.OWNER and s.TABLE_NAME = t.OBJECT_NAME ) 
where                   
    s.DB_LINK is null and
    t.OWNER is null;

注意,惟一的区别是使用丙型Oracle连接语法与ANSI连接语法。

这些问题不是重复的 of this one,因为另一个问题是关于涉及9个以上表的一个非常复杂的查询,唯一的答案是,除了语法用法(主要是表的顺序)之外,查询是非常不同的。

在我的例子中,这是一个非常简单的查询,仅仅是两个关系之间的连接,没有市长复杂的差异,包括表的顺序。

  • 这是Oracle9i?中的一个bug吗?
  • 是什么原因造成了如此巨大的性能差异?

更新:

这是执行计划,请注意,query的解释计划没有显示基数、成本或字节信息:

快速旧式连接:

Slow,ANSI连接:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-11 11:55:16

好吧,经过很长一段时间都没有答案。我做了些测试。

我在10g和11g中运行了相同的查询,这两个版本都是带有ANSI联接的,而具有WHERE联接的则在不到1秒的时间内运行。

由于问题只存在于9i中,对ANSI的支持与引入的版本相同,因此我假设是9i中的一个bug,它可以在补丁中解决,也可以不能解决。

正如我提到的,从10g开始,两种口味的连接都表现得很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33017069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档