首页 > Linux操作系统 > Linux操作系统 > 执行计划的执行顺序精解(3)
具体分析一下每一步都做了些什么:
摘录执行计划部分内容,用来分析
Id | Operation | Name Starts E-Rows A-Rows
0 | SELECT STATEMENT | | 1 | 6
1 | HASH JOIN | | 1 | 6
2 | NESTED LOOPS | | 1 | 6
3 | NESTED LOOPS | | 1 | 1
4 | TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |1 | 1
5 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | 1
6 | TABLE ACCESS BY INDEX ROWID| LOCATIONS | 1 | 23
7 | INDEX UNIQUE SCAN | LOC_ID_PK | 1 | 1
8 | TABLE ACCESS FULL | EMPLOYEES | 1 | 6
9 | TABLE ACCESS FULL | JOBS | 1 | 19
(5)oracle进程访问表的索引结构,依据索引DEPT_ID_PK(访问where条件后面的b.department_id = 30)对索引结构进行索引唯一扫描,执行一次,得到索引列值与该列所在行的rowid。
(7)oracle进程继续访问另外一张表的索引结构,依据索引LOC_ID_PK(访问where条件后面的d.location_id)对索引结构进行唯一性扫描,执行一次,得到该索引列值与该列所在行的所有的rowid,oracle进程接下来进行回表操作。
(4)首先依据rowid,执行一次,回表DEPARTMENTS得到中间结果集
(DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
30 Purchasing 114 1700 )
因为表DEPARTMENTS where条件后面的索引列DEPARTMENT_ID是一个限制列,而非连接列,故而所得部门ID=30的中间结果集,就一条记录,从执行计划的rows=1也可验证。
(6)再依据索引列的所有的rowid,回表LOCATIONS 得到中间结果集
(LOCATION_ID STREET_ADDRESS POSTAL_CODE CITY STATE_PROVINCE COUNTRY_ID
1000 1297 Via Cola di Rie 00989 Roma IT
1100 93091 Calle della Testa 10934 Venice IT
1200 2017 Shinjuku-ku 1689 Tokyo Tokyo Prefecture JP
1300 9450 Kamiya-cho 6823 Hiroshima JP
1400 2014 Jabberwocky Rd 26192 Southlake Texas US
1500 2011 Interiors Blvd 99236 South San Francisco California US
............
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21266384/viewspace-767736/ ,如需转载,请注明出处,否则将追究法律责任。