您的位置:首页 > 其它

中间表--简例说明

2016-04-21 18:15 344 查看
SQL> select t.sid, t.sname
2    from t_student t
3   where t.sid not in
4         (select distinct t.sid
5            from t_score t
6           where t.cid in
7                 (select t.cid
8                    from t_course t
9                   where t.tid =
10                         (select t.tid from t_teacher t where t.tname = '叶平')));

SID SNAME
---------- --------------------
2005006 kdj
2005007 bsk
2005008 hbl
2005009 hqb
2005010 dm

已用时间:  00: 00: 00.03

执行计划
----------------------------------------------------------
Plan hash value: 668890525

----------------------------------------------------------------------------------
| Id  | Operation            | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |           |     9 |    90 |    51   (6)| 00:00:01 |
|*  1 |  FILTER              |           |       |       |            |          |
|   2 |   TABLE ACCESS FULL  | T_STUDENT |    10 |   100 |     3   (0)| 00:00:01 |
|*  3 |   HASH JOIN          |           |     1 |    20 |     7  (15)| 00:00:01 |
|*  4 |    TABLE ACCESS FULL | T_COURSE  |     1 |    10 |     3   (0)| 00:00:01 |
|*  5 |     TABLE ACCESS FULL| T_TEACHER |     1 |    11 |     3   (0)| 00:00:01 |
|*  6 |    TABLE ACCESS FULL | T_SCORE   |     2 |    20 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "T_SCORE" "T","T_COURSE"
"T" WHERE "T"."TID"= (SELECT /*+ */ "T"."TID" FROM "T_TEACHER" "T" WHERE
"T"."TNAME"='叶平') AND "T"."CID"="T"."CID" AND LNNVL("T"."SID"<>:B1)))
3 - access("T"."CID"="T"."CID")
4 - filter("T"."TID"= (SELECT /*+ */ "T"."TID" FROM "T_TEACHER" "T"
WHERE "T"."TNAME"='叶平'))
5 - filter("T"."TNAME"='叶平')
6 - filter(LNNVL("T"."SID"<>:B1))

统计信息
----------------------------------------------------------
1  recursive calls
0  db block gets
140  consistent gets
0  physical reads
0  redo size
555  bytes sent via SQL*Net to client
385  bytes received via SQL*Net from client
2  SQL*Net roundtrips to/from client
0  sorts (memory)
0  sorts (disk)
5  rows processed

SQL> select sid, sname
2    from t_student
3   where sid not in (select distinct t1.sid
4                       from t_score t1, t_course t2, t_teacher t3
5                      where t1.cid = t2.cid
6                        and t3.tid = t2.tid
7                        and t3.tname = '叶平');

SID SNAME
---------- --------------------
2005006 kdj
2005007 bsk
2005008 hbl
2005009 hqb
2005010 dm

已用时间:  00: 00: 00.03

执行计划
----------------------------------------------------------
Plan hash value: 1085620063

------------------------------------------------------------------------------------
| Id  | Operation              | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |           |     9 |    90 |    51   (6)| 00:00:01 |
|*  1 |  FILTER                |           |       |       |            |          |
|   2 |   TABLE ACCESS FULL    | T_STUDENT |    10 |   100 |     3   (0)| 00:00:01 |
|*  3 |   HASH JOIN            |           |     1 |    31 |    10  (10)| 00:00:01 |
|   4 |    MERGE JOIN CARTESIAN|           |     2 |    42 |     6   (0)| 00:00:01 |
|*  5 |     TABLE ACCESS FULL  | T_TEACHER |     1 |    11 |     3   (0)| 00:00:01 |
|   6 |     BUFFER SORT        |           |     2 |    20 |     3   (0)| 00:00:01 |
|*  7 |      TABLE ACCESS FULL | T_SCORE   |     2 |    20 |     3   (0)| 00:00:01 |
|   8 |    TABLE ACCESS FULL   | T_COURSE  |     7 |    70 |     3   (0)| 00:00:01 |
------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "T_TEACHER" "T3","T_COURSE"
"T2","T_SCORE" "T1" WHERE LNNVL("T1"."SID"<>:B1) AND "T3"."TID"="T2"."TID"
AND "T1"."CID"="T2"."CID" AND "T3"."TNAME"='叶平'))
3 - access("T1"."CID"="T2"."CID" AND "T3"."TID"="T2"."TID")
5 - filter("T3"."TNAME"='叶平')
7 - filter(LNNVL("T1"."SID"<>:B1))

统计信息
----------------------------------------------------------
1  recursive calls
0  db block gets
178  consistent gets
0  physical reads
0  redo size
555  bytes sent via SQL*Net to client
385  bytes received via SQL*Net from client
2  SQL*Net roundtrips to/from client
10  sorts (memory)
0  sorts (disk)
5  rows processed


创建中间表进行性能的缓冲

create table t_sc_cs_tc
as
select distinct t1.sid
from t_score t1, t_course t2, t_teacher t3
where t1.cid = t2.cid
and t3.tid = t2.tid
and t3.tname = '叶平'
优化后的执行计划:

SQL> select t.sid, t.sname
2    from t_student t
3   where t.sid not in (select t2.sid from t_sc_cs_tc t2);

SID SNAME
---------- --------------------
2005006 kdj
2005007 bsk
2005008 hbl
2005009 hqb
2005010 dm

已用时间:  00: 00: 00.01

执行计划
----------------------------------------------------------
Plan hash value: 54380670

---------------------------------------------------------------------------------
| Id  | Operation          | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |            |     9 |    90 |    13   (0)| 00:00:01 |
|*  1 |  FILTER            |            |       |       |            |          |
|   2 |   TABLE ACCESS FULL| T_STUDENT  |    10 |   100 |     3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| T_SC_CS_TC |     5 |    65 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "T_SC_CS_TC" "T2" WHERE
LNNVL("T2"."SID"<>:B1)))
3 - filter(LNNVL("T2"."SID"<>:B1))

Note
-----
- dynamic sampling used for this statement

统计信息
----------------------------------------------------------
7  recursive calls
0  db block gets
46  consistent gets
0  physical reads
0  redo size
555  bytes sent via SQL*Net to client
385  bytes received via SQL*Net from client
2  SQL*Net roundtrips to/from client
0  sorts (memory)
0  sorts (disk)
5  rows processed
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: