首页 > 数据库 > Oracle > [20191220]格式化执行计划.txt
[20191220]格式化执行计划.txt
--//昨天帮别人优化一个sql语句.对方给的执行计划类似如下:
SCOTT@book> set linesize 80
SCOTT@book> alter session set statistics_level = all;
Session altered.
SCOTT@book> select * from scott.emp ;
SCOTT@book> @ dpc '' ''
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 9mhzzknczbj6p, child number 1
-------------------------------------
select * from scott.emp
Plan hash value: 3956160932
--------------------------------------------------------------------------------
------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time
| A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------
------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 3 (100)|
| 14 |00:00:00.01 | 7 |
| 1 | TABLE ACCESS FULL| EMP | 1 | 14 | 532 | 3 (0)| 00:00:
01 | 14 |00:00:00.01 | 7 |
--------------------------------------------------------------------------------
------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / EMP@SEL$1
--//实际上的执行计划远比上面看到的复杂.为什么不自己简单设置一下环境.再上传结果.无语...实际上包括我的同事也是一样....
--//我自己使用vim,利用一个宏解决这个问题.我一般写宏先记录按键,然后执行,这样不容易出错.最好这些按键不要包含方向键使用hjkl代替.
<ESC>:j!<CR>jdd<ESC>
--//注:这里<ESC>表示<ESC>按键输入如下,启动宏记录:
qj
--//然后打入上面按键,最后按q结束.
--//打入:register j看到如下:
:register j
--- Registers ---
"j ^[:j!^Mjdd^[
--//然后计算要重复的次数,很简单选中vim提示里面有选中的行数除以3就是重复此时.我这里是6次,直接输入6@j,看到效果如下:
--------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 3 (100)| | 14 |00:00:00.01 | 7 |
| 1 | TABLE ACCESS FULL| EMP | 1 | 14 | 532 | 3 (0)| 00:00:01 | 14 |00:00:00.01 | 7 |
--------------------------------------------------------------------------------------------------------------------
--//可以发现还是有点点瑕疵.不过基本ok了,自己再修改一下ok.
--//我后来看tanelpoder的blog,链接也提到类似问题:
http://blog.tanelpoder.com/2010/01/18/sometimes-things-are-easy-part-1-how-to-fix-wrapped-execution-plan-text/
--//他的解决方式是:
$ cat /tmp/x | awk '{ printf "%s", $0 ; if (NR % 3 == 0) print } END { print }'
--//很少用.我自己还是使用我的方法处理类似问题.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2669603/ ,如需转载,请注明出处,否则将追究法律责任。