oracle执行计划,试图了解

时间:2016-10-23 11:22:45

标签: sql oracle execution

EXPLAIN PLAN FOR
  SELECT sightings.sighting_id, spotters.spotter_name,
         sightings.sighting_date
    FROM sightings
         INNER JOIN spotters
                 ON sightings.spotter_id = spotters.spotter_id
   WHERE sightings.spotter_id = 1255;

SELECT plan_table_output
  FROM table(dbms_xplan.display('plan_table',null,'basic'));




id   Operation                         Name
0    select statement        
1      nested loops
2        table access by index rowid   spotters
3          index unique scan           pk_spotter_ID
4        table access full             sightings

我试图理解这里到底发生了什么,这听起来是对的:

  1. 首先评估select语句,并忽略输出中不在选择列表中的属性

  2. 嵌套循环然后计算spotters上的内连接.spotters_id = sightings.spotter_id

  3. 索引rowid的表访问权限检索带有步骤3从spotters表返回的rowid的行

  4. 索引唯一扫描,扫描PK_SPOTTER_ID索引中的spotter_id,并在spotters表中找到与rowids相关的行

  5. 表格访问已满,然后完全扫描目击事件,直到发现目标_id = 1255

3 个答案:

答案 0 :(得分:2)

注意:这些答案反映了问题的原始版本。

Oracle正在全面阅读这两个表。

基于join键对每个表进行哈希处理 - “重新排序”表格,使得相似的键出现在彼此附近。

正在进行加入。

然后进行最终select的计算并将结果返回给用户。

答案 1 :(得分:2)

步骤似乎基本上是正确的,但应该是按钮。 投影(选择相关列)在扫描阶段尽可能早地完成。 索引操作是SEEK(您没有扫描整个索引)

答案 2 :(得分:0)

这是非正式地按正确的顺序发生的事情:

-- The index pk_spotter_id is scanned for at most one row that satisfies spotter_id = 1255
3          index unique scan           pk_spotter_ID

-- The spotter_name column is fetched from the table spotters for the previously found row
2        table access by index rowid   spotters

-- A nested loop is run for each (i.e. at most one) of the previously found rows
1      nested loops

-- That nested loop will scan the entire sightings table for rows that match the join
-- predicate sightings.spotter_id = spotters.spotter_id
4        table access full             sightings

-- That'll be it for your select statement
0    select statement        

一般情况下(有大量例外情况),可以阅读Oracle执行计划

  • 自下而上
  • 第一个兄弟姐妹

这意味着你走到树下直到找到第一个叶子操作(例如#3),然后执行"第一个",它的结果被输入到父级(例如# 2),所有的兄弟姐妹然后自上而下执行,所有的兄弟姐妹'结果也被输入父母,然后父母结果被送到祖母(例如#1),直到你达到顶级操作。

这是对发生的事情的非正式解释。请注意,一旦语句变得更复杂,这些规则将有许多例外。