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 分钟。

tl_tl2009 回答:sql查询的优化

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/10747.html

大家都在问