执行计划
--sqlplus中
Set autotrace
用法 Set autot[Trace]{Off|On|Trace[Only]}[EXP[LAIN]][STAT[ISTICS]]
show autotrace --查看状态
Set autot On
Set linesize 200
Select * From tt;
/*----省略查询结果------------
执行计划
----------------------------------------------------------
Plan hash value: 264906180
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2036 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| TT | 1 | 2036 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
统计信息
----------------------------------------------------------
1 recursive calls --解析递归调用次数,再次调用该语句时不再需要
0 db block gets --
5 consistent gets --该语句执行访问了5个逻辑组
0 physical reads
0 redo size --
8808 bytes sent via SQL*Net to client --网络的资源消耗发送给client
385 bytes received via SQL*Net from client --网络的资源消耗从client接受
2 SQL*Net roundtrips to/from client --协议来回2次
0 sorts (memory) --内存中排序次数
0 sorts (disk) --硬盘中排序次数
9 rows processed --一共处理了5条数据
----------------------------*/
--不出现查询结果的执行计划:
Set autotrace Trace[Only];
Select * From t1 Where object_id = 2;
/*
执行计划
----------------------------------------------------------
Plan hash value: 50753647
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 8 | 1416 | 11 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 8 | 1416 | 11 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_T1 | 8 | | 1 (0)| 00:00:01 | --先执行 INDEX RANGE SCAN索引范围扫描(对应 INDEX UNIQUE SCAN索引唯一扫描,唯一索引用)
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id): --谓词信息
---------------------------------------------------
2 - access("OBJECT_ID"=2) --access表示多路径时的访问条件,一般都是先访问索引 {对应filter("OBJECT_ID"+0=2)唯一路径过滤条件}
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
11 consistent gets
0 physical reads
0 redo size
1788 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)
8 rows processed
*/
select count(*) from dba_objects;
/*
执行计划
----------------------------------------------------------
Plan hash value: 2598313856
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 31 (4)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | | |
| 2 | VIEW | DBA_OBJECTS | 8902 | | 31 (4)| 00:00:01 |
| 3 | UNION-ALL | | | | | |
|* 4 | FILTER | | | | | | --*表示用到了谓词信息
|* 5 | HASH JOIN | | 10045 | 745K| 30 (4)| 00:00:01 |
| 6 | TABLE ACCESS FULL | USER$ | 28 | 84 | 2 (0)| 00:00:01 | --#索引,$表
|* 7 | TABLE ACCESS FULL | OBJ$ | 10045 | 716K| 27 (0)| 00:00:01 |
|* 8 | TABLE ACCESS BY INDEX ROWID| IND$ | 1 | 7 | 2 (0)| 00:00:01 |
|* 9 | INDEX UNIQUE SCAN | I_IND1 | 1 | | 1 (0)| 00:00:01 |
| 10 | NESTED LOOPS | | 1 | 16 | 1 (0)| 00:00:01 |
| 11 | INDEX FULL SCAN | I_LINK1 | 1 | 13 | 0 (0)| 00:00:01 |
| 12 | TABLE ACCESS CLUSTER | USER$ | 1 | 3 | 1 (0)| 00:00:01 |
|* 13 | INDEX UNIQUE SCAN | I_USER# | 1 | | 0 (0)| 00:00:01 | -- INDEX UNIQUE SCAN索引唯一扫描
-----------------------------------------------------------------------------------------------
--执行顺序6,7,5,9,8,4,11,13,12,10,3,2,1,0
Predicate Information (identified by operation id): --谓词信息
---------------------------------------------------
4 - filter("O"."TYPE#"<>1 AND "O"."TYPE#"<>10 OR "O"."TYPE#"=1 AND (SELECT 1 FROM
"SYS"."IND$" "I" WHERE "I"."OBJ#"=:B1 AND ("I"."TYPE#"=1 OR "I"."TYPE#"=2 OR
"I"."TYPE#"=3 OR "I"."TYPE#"=4 OR "I"."TYPE#"=6 OR "I"."TYPE#"=7 OR "I"."TYPE#"=9))=1)
5 - access("O"."OWNER#"="U"."USER#")
7 - filter("O"."NAME"<>'_NEXT_OBJECT' AND "O"."NAME"<>'_default_auditing_options_'
AND "O"."LINKNAME" IS NULL)
8 - filter("I"."TYPE#"=1 OR "I"."TYPE#"=2 OR "I"."TYPE#"=3 OR "I"."TYPE#"=4 OR
"I"."TYPE#"=6 OR "I"."TYPE#"=7 OR "I"."TYPE#"=9)
9 - access("I"."OBJ#"=:B1)
13 - access("L"."OWNER#"="U"."USER#")
统计信息
----------------------------------------------------------
8 recursive calls
0 db block gets
2279 consistent gets
0 physical reads
0 redo size
409 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)
1 rows processed
*/
Select * From v$sql Where sql_text Like 'SELECT * FROM T1 WHERE OBJECT_ID%'
--OPTIMIZER statistics优化器统计信息
Sql> Exec dbms_stats.gather_table_stats('SYSTEM','T1',cascade => True); --发出一个包,对优化器统计信息进行收集整理,(,cascade => True可以省略,作用是表索引的优化器统计信息一起收集),10g以上默认每晚22点开始自动收集整理
Select * From DBA_TABLES Where TABLE_NAME = 'T1' --优化器统计信息相关的列,NUM_ROWS表里有多少行数据,BLOCKS存放数据使用的块数,AVG_ROW_LEN每行数据的长度字节数,
Select 79112*84/1024/1024 From dual --6.33755493164063 通过数据行数和每行数据的长度,计算表的大小,约为6M多
Select * From dba_tab_histograms Where table_name ='T1' And column_name = 'OBJECT_ID'
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15810196/viewspace-1079758/
,如需转载,请注明出处,否则将追究法律责任。