为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V8
【操作系统】: centos
【CPU】: intel
【问题描述】*: 一个单任务表,三个不同维度的查询sql进行union all 组合后,执行查询,现在测试环境单表是37w数据左右,执行需要1.7s ,最终结果集大概是134条。 加了单索引 和 联合索引都试验了,单索引会提升0.2-0.3 ,联合索引反向优化(可能和我的sql水平有关系)。求解相关的优化思路,因为这个表每年大概增长180w左右,其他查询会在3s,业务有点不能接受。附件 是sql 需要优化的.sql
建议根据trace计划和et做分析,获取trace计划和et参考如下,拿出1.log文件进行分析:
./disql SYSDBA/SYSDBA@192.168.80.113:5236 -c "set linesize 32767" -c "set pagesize 0"
spool 1.log
call SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);
CALL SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1);
set autotrace trace
执行sql; --替换成你要收集的sql
et(sf_get_last_exec_id());
--call et(select top 1 exec_id from v$sql_history where sess_id=sessid order by exec_id desc) --如果老版本不支持上面函数,可用这个获取上一条执行sql的et
spool off
把数据库版本、表结构、执行计划也一起发出来看看