暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 加入顺序

askTom 2016-05-09
123

问题描述

在这里,我提到了“Oracle Database 11g管理专家SAM ALAPTI撰写的第1053页中的一个片段。
但我对Oracle如何影响连接顺序有些困惑?

- :书籍片段: -
-------------------

选择联接顺序
一旦优化程序选择了连接方法,它就会确定表的连接顺序。
优化程序的目标始终是以这样一种方式连接表,即驱动表消除了
最大行数。包含四个表的查询最多有4种阶乘方法,即24种可能的方法
其中台可以连接在一起。每一个这样的联合命令都会导致许多不同的执行
根据可用索引和访问方法进行计划。寻找最佳连接策略
在具有大量表的查询中,可能需要很长时间,因此Oracle依赖自适应的
搜索策略,以限制查找最佳执行计划所需的时间。一种自适应搜索策略
意味着优化所用的时间始终占总时间的一小部分
用于执行查询本身。

现在,在开始之前的问题是假设我有四个表,如项目,客户,订单,雇员。

项表包含唯一的10,000行。
客户表包含唯一的100,000行。
订单表包含客户给出的订单,一个客户包含多个物料,有50万行。
员工表包含发运客户项目并具有150,000行的唯一数据。

现在,我的问题是假设我使用下面的方法在from子句中连接一个表,如Item、雇员、Order和Customer。
因此,Oracle如何决定连接方法,就像我们在表单子句中提供的,或者依赖于where子句。

或首先扫描项目表,然后使用员工扫描项目表的结果,依此类推...在最后阶段,项目、员工、订单与客户联接的结果集。

当orcel自动决定最佳的连接顺序?

专家解答

虽然内容有些神秘,但最好查看一下10053跟踪(优化程序跟踪)。因此,您可以执行以下操作:

SQL>变更会话集合事件='10053跟踪名称上下文永久,级别1';
SQL>解释【您的sql】的计划

在跟踪文件中,您将看到类似的内容:

"单表访问路径"

在这里,我们根据每个表的大小和您提供的谓词计算出开始使用每个表的成本。因此,对于每个项目,客户,员工,订单,我们将有一个估计的成本开始与每一个。

然后通过跟踪文件,您将看到如下内容:

加入顺序【1】 :物料,客户,订单,员工
加入顺序【2】 :物料,订单,客户,员工
...
加入订单【13】 :客户、物料、员工、订单

等等,等等,我们通过潜在的连接,然后做出我们认为最好的决定。

现在,我们有所有的“捷径”在那里,以使这一效率。

例如,假设在“连接顺序1”的末尾,我们认为按该顺序进行查询需要花费500美元。当我们得到加入订单13时,假设我们之前计算出了客户*开始*的成本是620。那么我们就不会费心去看连接了,因为如果我们从620开始,加入的成本会更高,而且我们已经有了一个总花费只有500的连接。

等等等等。

希望这个能帮上忙。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论