微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle 11g 分析出那些表缺失索引

在设计、开发阶段我们会加索引,不过难免保证在运维阶段索引加全了。此时就需要把执行计划中带有全表扫描的sql都找出来。
sqlplus TEST/TEST@10.10.15.25 --数据库用户名和密码,每个实例上都要运行
set serveroutput on size 100000
spool d:/result.txt
set pagesize 200
set linesize 800
declare
cursor c_cursor is select hash_value,CHILD_NUMBER,sql_FULLTEXT from(
select /*+use_hash(s,v)*/ s.hash_value,s.CHILD_NUMBER,s.sql_FULLTEXT,
row_number() over(partition by s.HASH_VALUE order by null) rn
from v$sql s,v$sql_plan v
where s.sql_ID =v.sql_ID
and v.operation = 'TABLE ACCESS'
and v.OPTIONS = 'FULL'
and s.CHILD_NUMBER =0
and v.OBJECT_OWNER in ('SPROC1','SPROC2','SPROC3')) where rn=1;
c_row c_cursor%rowtype;
TYPE t_arry_plan IS VARRAY(1000) OF VARCHAR2(200);
array_plan t_arry_plan;
begin
DBMS_OUTPUT.ENABLE(buffer_size=>null);
for c_row in c_cursor loop
begin
DBMS_OUTPUT.PUT_LINE(c_row.sql_FULLTEXT);
select plan_table_output bulk collect into array_plan from
table(dbms_xplan.display_cursor(c_row.hash_value,c_row.child_number,'advanced'));
FOR i IN array_plan.FirsT .. array_plan.LAST LOOP
DBMS_OUTPUT.PUT_LINE(array_plan(i));
END LOOP;
DBMS_OUTPUT.PUT_LINE('**************************************************************************');
DBMS_OUTPUT.PUT_LINE(chr(10)||chr(10));
exception
When others then
DBMS_OUTPUT.PUT_LINE('有报错');
end;
end loop;
end;
/

spool off;


出来的结果如下,可以看到是没有加索引的:

HASH_VALUE 844842,child number 0
----------------------------------
select assetaudit0_.ID as ID1064_0_,
assetaudit0_.APPROVER_UID as APPROVER7_1064_0_,
assetaudit0_.APPROVER_UNAME as APPROVER8_1064_0_,
assetaudit0_.AUDIT_COMMENT as AUDIT9_1064_0_,
assetaudit0_.AUDIT_EXPLAIN as AUDIT10_1064_0_,
assetaudit0_.AUDIT_STATUS as AUDIT11_1064_0_,
assetaudit0_.AUDIT_TIME as AUDIT12_1064_0_,
assetaudit0_.BUSInesS_BILL_ID as BUSInesS13_1064_0_,
assetaudit0_.FULL_PATH as FULL14_1064_0_,
assetaudit0_.FUNCTION_LOCATION_ID as FUNCTION15_1064_0_,
assetaudit0_.HISTORY_VERSION as HISTORY16_1064_0_,
assetaudit0_.OBJECT_ID as OBJECT17_1064_0_,
assetaudit0_.OBJECT_NAME as OBJECT18_1064_0_,
assetaudit0_.OBJECT_TYPE as OBJECT19_1064_0_,
assetaudit0_.TRANSFER_STATE as TRANSFER20_1064_0_,
assetaudit0_.WORKSPACE_ID as WORKSPACE21_1064_0_
from GG_ASSET_AUDIT assetaudit0_
where assetaudit0_.ID = :1

Plan hash value: 2126140279
------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2466 (100)| |
|* 1 | TABLE ACCESS FULL| GG_ASSET_AUDIT | 1 | 218 | 2466 (1)| 00:00:30 |
------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / ASSETAUDIT0_@SEL$1
Outline Data
-------------

.....................................................................................

-----------------------------------------------------------
Peeked Binds (identified by position):
--------------------------------------
1 - :1 (VARCHAR2(30),CSID=852): '052cc327153f4beba86042bfbcf3b623'
Predicate information (identified by operation id):
---------------------------------------------------
1 - filter("ASSETAUDIT0_"."ID"=:1) Column Projection information (identified by operation id): -----------------------------------------------------------

原文地址:https://www.jb51.cc/oracle/208371.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐