1、相应语句复制到生产plsql,直接查看执行计划; 可以与实际项目运行不一致
2、查看实际项目运行的执行计划
select * from v$sqltext t where t.sql_text like ‘%AND SHARE_MERGE_ID =%’; --根据sql查找
select sql_id, count(1) from v$active_session_history group by sql_id order by count(1) desc --根据执行频率筛选
select * from v$sqltext t where t.sql_id = ‘0svcxwmsp5x6g’; --确定相应sql
select * from v$active_session_history t where t.sql_id=‘0svcxwmsp5x6g’ order by sample_time ; --查看具体执行情况, 可以distinct(t.sql_plan_hash_value)看看不同执行计划
select * from dba_hist_sqlstat where sql_id=‘0svcxwmsp5x6g’; --2503469461 4079721670
select * from V$SQL_PLAN where plan_hash_value=2503469461; --查看执行计划
实际执行计划可能与预想的不一样:
单表存在两个索引:
1、unique多字段索引:A、B、C
2、normal单字段索引:C
当单表查询,where条件为A+B+C字段时,却走了C字段normal索引。
oracle如何选择索引的,如何才能走unique索引? 且程序突然变慢,之前走了复合索引?