执行计划+光标移动大法——落落
来源:互联网 发布:mac口红all fired up 编辑:程序博客网 时间:2024/05/22 10:34
执行计划
SQL> grant dba to scott;
Grant succeeded.
SQL> conn scott/scott
Connected.
创建测试表test
SQL> create table test as select * fromdba_objects;
Table created.
查看执行计划
SQL> explain plan for select count(*) from test;
Explained.
SQL> select* from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1950795681
-------------------------------------------------------------------
| Id | Operation | Name |Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0| SELECT STATEMENT | | 1| 160 (2)| 00:00:02 |
| 1| SORT AGGREGATE | | 1 | | |
| 2| TABLE ACCESSFULL| TEST | 53509 | 160 (2)| 00:00:02 |
-------------------------------------------------------------------
Note
-----
- dynamicsampling used for this statement
13 rows selected.
SQL> select sum(bytes/1024/1024) "size_MB" from user_segments where segment_name='TEST';
size_MB
----------
6
我们查出来这个表有6MB,那么扫描的时候大概会扫描6MB
创建索引
SQL> create index idx on test(object_id);
Index created.
SQL> alter table test modify object_id not null;
Table altered.
SQL> explainplan for select count(*) from test;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2452503352
----------------------------------------------------------------------
| Id | Operation | Name |Rows | Cost (%CPU)| Time |
----------------------------------------------------------------------
| 0| SELECT STATEMENT | | 1 | 29 (4)| 00:00:01 |
| 1| SORT AGGREGATE | | 1 | | |
| 2| INDEX FASTFULL SCAN| IDX | 53509 | 29 (4)| 00:00:01 |
----------------------------------------------------------------------
Note
-----
-dynamic sampling used for this statement
13 rows selected.
做sql优化不要看cost、时间,因为cost是靠数据公式算出来的,不一定准。要看访问路径以及访问的基数。
执行计划——显示当前的访问路径
表JOIN的实验
SQL> explain plan for select * from dept d,emp ewhere d.deptno=e.deptno and d.deptno=20;
Explained.
SQL> select * from table(dbms_xplan.display);
执行顺序:32410
分析:
Id=1 NESTED LOOPS :嵌套循环,显示表与表之间的连接方式,此为父操作
Id=2 TABLE ACCESS BY INDEX ROWID:y与id=4缩进相同,处于同一个级别,但先执行上面的操作。Id=2下面又有一个缩进,意味着3是2的子操作,2是父操作,子操作先执行。
因此执行顺序是32410。
光标移动大法
看<光标移动大发.txt>,就用sql*plus看,不要用阅读器看。
不是缩进越靠右越先执行!
从下往上看:
光标放到42行的‘table’前面,向上移,可以看到正好移动到3‘nested’前面,说明,2是3和42的父操作;3是个嵌套循环,他自己也是个父操作;再把光标放到3的第一个子操作前即4;4也是个父操作,把光标移到4的第一个子操作即5前,5和39平;再移到5的第一个子操作前即6,发现6、19、40平,但40在39后面,不能穿墙(不能穿过39到40),所以40不能算;再放到7,7和18连接;7是父操作,看8和13;8是父操作,看9和10,因为9在10上,所以最先执行9!
从上往下看:
将光标放到0,发现没有与其对齐的;再把光标下移,放到1,发现也没有与其对齐的;光标移到2,没有与其对齐的;移到3,42与其对齐;接下来的步骤参照从下往上看。
看执行计划——找出父与子操作的关系
- 执行计划+光标移动大法——落落
- 【道森试听】执行计划+光标移动大法——落落
- 光标移动大法。。。 来自落落大神
- Emacs(二)——移动光标
- Oracle执行计划——Oracle 如何启用执行计划
- Oracle执行计划——Oracle 如何启用执行计划
- Oracle执行计划——Oracle 如何启用执行计划
- 编码速度之——文本选中、光标移动...
- NGUI控件改造——输入框光标可移动
- 光标移动
- 光标移动
- 光标移动
- 移动传感任务地图—实施计划
- 执行计划——概念总结
- 获取执行计划——EXPLAN PLAN
- MySQL——EXPLAIN和执行计划
- 移动端自适应布局大法
- 怎样 隐藏光标—设置光标
- nyoj 68 三点顺序
- 15个有效学习方法【转载】
- scanf函数安全性分析
- 我的ios app崩溃了,该怎么处理呢?(一)
- 08-php雇员管理系统-分层模式实现通用分页
- 执行计划+光标移动大法——落落
- 一个SQL语句的优化
- Varnish调优
- CentOS 6.4 内核编译nbd模块
- 运行时异常
- 网络中平均路径长度
- 数据库对象
- Microsoft Outlook 2010设置163和gmail邮箱账户
- 高精度算法库