用pl sql 看执行计划
按F5显示执行计划,或者按菜单 工具--解释计划。
后面显示的字段可以点小扳手设置设置,默认的事耗费、基数、字节。
一般耗费越低越好。
一般都用索引,没有全表扫描较好。
sqlDeveloper查看执行计划
按F10 或 快捷图标(第四个)
object_name:表名,options:选择(全表扫描、用索引),cost:耗费
sqlplus查看执行计划
xshell
sqlplus
sql>set autotrace on
select * from RESOURSE t where id = '402881ea3fe04843013fe10417f3022a'
Statistics
----------------------------------------------------------
8 recursive calls
0 db block gets
83 consistent gets
0 physical reads
0 redo size
1401 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
3 rows processed
设置autotrace
序号 | 命令 | 解释 |
1 | SET AUTOTRACE OFF | 此为默认值,即关闭Autotrace |
2 | SET AUTOTRACE ON EXPLAIN | 只显示执行计划 |
3 | SET AUTOTRACE ON STATISTICS | 只显示执行的统计信息 |
4 | SET AUTOTRACE ON | 包含2,3两项内容 |
5 | SET AUTOTRACE TRACEONLY | 与ON相似,但不显示语句的执行结果 |
Statistics 名词解释
1、recursive calls 递归调用(后台掉用的)
2、DB Block Gets(当前请求的块数目)当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的块数。正常的情况下,一个查询提取的块是在查询开始的那个时间点上存在的数据块,当前块是在这个时刻存在的数据块,而不是在这个时间点之前或者之后的数据块数目。
3、Consistent Gets(数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块)这里的概念是在处理你这个操作的时候需要在一致性读状态上处理多少个块,这些块产生的主要原因是因为由于在你查询的过程中,由于其他会话对数据块进行操 作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所以需要对回滚段中的数据块的前映像进行查询,以保证数据的一致性。这样就产 生了一致性读。
4、Physical Reads(物理读)就是从磁盘上读取数据块的数量,其产生的主要原因是: 1、 在数据库高速缓存中不存在这些块 2、 全表扫描 3、 磁盘排序
ORACLE执行计划的一些基本概念(1)
http://database.51cto.com/art/200611/34273.htm
ORACLE执行计划的一些基本概念(2)
http://database.51cto.com/art/200611/34273_1.htm
利用pl/sql执行计划评估SQL语句的性能简析
http://www.2cto.com/database/201204/127178.html
Oracle Hint的用法