暂无图片
分享
张洋华
2020-03-13
SQL优化
暂无图片 5M

一个告警系统的综合查询SQL,平时执行要30s,客户觉得太慢了,sql相关信息稍后发出来,希望各位大佬能给点有点优化思路。

收藏
分享
7条回答
默认
最新
张洋华
上传附件:sqltext.txt
暂无图片 评论
暂无图片 有用 0
张洋华
上传附件:sql10.txt
暂无图片 评论
暂无图片 有用 0
邓秋爽

收集个SQLHC

暂无图片 评论
暂无图片 有用 0
刘峰

在ALARM_TIME列建立索引,如果ALARM_TIME可以为空,可以按如下方式建立索引
create index idx_xxx on AMOD_TARGET_ALARM(ALARM_TIMEdesc,0);
然后按以下hint运行sql即可
SELECT *
FROM (SELECT temptable., ROWNUM ROW_NUM
FROM (select /
+ index(t ALARM_TIME的desc索引) use_nl(t,s,tc,r,a,si) leading(t) /a.IS_SENDZDALARM,
a.IS_SENDSMSALARM,
a.IS_SENDINTERFACEALARM,
t.TARGET_ID,
si.
,
t.TARGET_TYPE,
t.UNITID,
t.ALARM_TYPE,
t.ALARM_TIME,
t.ALARM_CONTENT,
t.ALARM_LEVEL,
t.SCANCE,
s.UNITNAME,
tc.code_name,
tc.code_id,
r.PROVIDER_NAME,
r.PROVIDER_ID
from AMOD_TARGET_ALARM t
left join amod_target_orginfo s
on t.unitid = s.unitid
left join amod_type_code tc
on tc.code_id = t.alarm_type
left join AMOD_TARGET_PROVIDER r
on t.PROVIDER_ID = r.PROVIDER_ID
left join AMOD_TARGET_ITEM a
on t.TARGET_ID = a.TARGET_ID
and t.unitid = a.unitid
left join (select /*+ no_merge */ sm.targetalarmid,
to_char(wmsys.wm_concat(sm.people)) people,
to_char(wmsys.wm_concat(sm.phone)) phone
from amod_alarm_smsreceiveinfo sm
group by targetalarmid) si
on si.targetalarmid = t.id
where 1 = 1
order by ALARM_TIME desc) temptable
WHERE ROWNUM <= 20)
WHERE ROW_NUM >= 1;
另外如果创建索引之后执行计划全部自动走NL+视图谓词推入,就不用加Hint了

暂无图片 评论
暂无图片 有用 0
张洋华
暂无图片 评论
暂无图片 有用 0
张洋华

感谢大佬们帮忙看问题~

暂无图片 评论
暂无图片 有用 0
张洋华
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏