Oracle- 优化SQL

从2019年10月数据库存储设备出现故障,解决故障后,

有个报表(View)从原来2分钟出结果变成60分钟出结果(500行).

用户无法接受如此差的效率,天天要求IT进行改善。

2020年元旦前做过优化行动,没完成就被中断,

今天再次进行优化,

步骤:

1、分析执行计划,提取关键信息

-- TABLE ASSCESS FULL TABLE: AR.RA_CUSTOMER_TRX_ALL RCT
-- Cost: 5,286 Bytes: 887,835 Cardinality: 59,189

创建两个

INDEX 分別:
CREATE INDEX AR.RA_CUSTOMER_TRX_N25 ON AR.RA_CUSTOMER_TRX_ALL
(INTERFACE_HEADER_ATTRIBUTE6)
CREATE INDEX AR.RA_CUSTOMER_TRX_N26 ON AR.RA_CUSTOMER_TRX_ALL
(SET_OF_BOOKS_ID);

2. 分析表的所有字段、所有索引字段、所有索引。

     analyze table AR.RA_CUSTOMER_TRX_ALL compute statistics;

 

3、SQL Script中分四段,每段用UNION ALL并集,

由此分段分析,

第一、二段SQL SELECT 分别耗时9:45、9:50, 添加 HINT提示功能,如: (INDEX( WSH.WSH_NEW_DELIVERIES) ) ,

调整WHERE条件后,分别提升到2分钟、45秒。

再分析第三、四段 ,其效率在20秒内出结果,因此不优化三、四段SQL. 

生成VIEW后,执行View查询只需要 21秒出结果(500行) .

 

是否真的优化成功还是存在CACHE的优化假象? 观察三天吧。

 

以下是在2020-03-13追加内容:

在2020-03-03 优化SQL。

经过10天的观察,SQL程式运行效率稳定在1分钟内出结果。

用户反馈,给IT 点先赞。

 

posted @ 2020-03-02 21:19  samrv  阅读(139)  评论(0编辑  收藏  举报