sql查询的优化

问题描述

我有以下请求,我想知道如何加速。数据来自视图。如果需要,我可以附加 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...