问题描述
我有以下请求,我想知道如何加速。数据来自视图。如果需要,我可以附加 ddl 以创建视图 V_REPORT_USER_disTANCE 和附加 ddl 以在视图中创建表
SELECT t.id,macro.NAME macro,div.name division,clr.NAME cltr,t.user_id,t.user_fio,t.track_datetime,t.OFFSET_HOURS,COALESCE(t.locality,to_char(t.pnt)) point,CASE
WHEN t.UNIT in ('ENGINEER')
THEN (select round(distance,1)
from T_disTANCE_REPORT_INFO dri
where dri.start_point_id = t.prev_id
and dri.end_point_id = t.id)
ELSE
decode(t.prev_latitude,round(
(disTANCE_IN_METERS(t.PREV_LATITUDE,t.PREV_LONGITUDE,t.LATITUDE,t.LONGITUDE) *
(SELECT TRACK_disTANCE_RATIO FROM T_USER_TRACKER_PROP tutp) / 1000),3))
END optimal_distance,CASE
WHEN t.UNIT in ('ENGINEER')
THEN sum((select round(distance,1)
from T_disTANCE_REPORT_INFO dri
where dri.start_point_id = t.prev_id
and dri.end_point_id = t.id))
OVER
(PARTITION BY t.user_id)
ELSE
sum(decode(t.prev_latitude,3)))
OVER (PARTITION BY t.user_id)
END sum_optimal_distance,nvl2(t.duration,lpad(EXTRACT(HOUR FROM t.duration),2,0) || ':' || lpad(EXTRACT(MINUTE FROM t.duration),0) ||
':' || lpad(EXTRACT(SECOND FROM t.duration),0),'-') duration,t.description,t.start_check_position,t.end_check_position,count(user_id) OVER (PARTITION BY t.user_id) || ' (всего)' || '/'
|| sum(decode(checklistid,NULL,1)) OVER (PARTITION BY t.user_id) || ' (из них магазины)' all_points
FROM V_REPORT_USER_disTANCE t
left join T_SHOP shp on shp.ID = t.SHOP_ID
left join T_CLUSTER clr on clr.ID = shp.CLUSTER_ID
left join T_GROUP_SHOP div on div.ID = clr.GROUPSHOP_ID
left join T_MACRO macro on macro.ID = div.MACRO_ID
WHERE t.USER_id in (?1)
AND TRACK_DATETIME between ?2 AND ?3
order by t.USER_FIO,t.TRACK_DATETIME,t.CHECKLISTID,t.id;
目前,该请求正在以一天为间隔执行约 7 分钟。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)