用户反馈一个报表突然变得很慢,查一个月数据 一天也不会显示出来(日志得知运行5小时了)。
我对该报表进行分析,
分析点1: 主查询语句共有5个UNION ALL 段,每个段中使用6个自定义函数
分析点2: 使用outer join 连接, 每段中都有外连接3~5个表(共同表与条件)
分析点3: 4个主数据表超千万行记录,外连接 数据表也近千万行记录。
分析点4:通过执行计划分析,执行计划内容不能充分反映慢的原因。另外几百行记录的表以全表后扫描一个,只是每段UNION 一次。
处理方式:
1、将自定义函数用VIEW代替
2、抽取每段中外连接表到最外层
3、HINT方式指定索引顺序
4、创建索引或重建索引。
效果:
40秒钟,在PLSQL DEVELOPER中显示结果。
10分钟导出 600MB数据(约65万行记录)EXCEL文件。