Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 优化max函数子查询_Oracle_Optimization_Plsql_Max - Fatal编程技术网

Oracle 优化max函数子查询

Oracle 优化max函数子查询,oracle,optimization,plsql,max,Oracle,Optimization,Plsql,Max,我需要一些优化查询的帮助 SELECT DISTINCT se.id, se.date_time_stamp, se.event_date_time, se.event_type_id, se.resource_id FROM view1 se, view2 rs WHERE EXISTS (SELECT 1 FROM view3 ds WHERE ds.dataset_id = dataset_id_

我需要一些优化查询的帮助

SELECT DISTINCT se.id, se.date_time_stamp, se.event_date_time, se.event_type_id, se.resource_id
  FROM   view1 se, view2 rs
 WHERE  EXISTS (SELECT 1
                  FROM view3 ds
                 WHERE ds.dataset_id = dataset_id_
                   AND rs.contract   = ds.contract
                   AND rs.active    ='TRUE')
                   AND se.resource_id = rs.resource_id
                   AND se.event_type_id  IN ('BO','BF')      
                   AND se.event_date_time >= ( SELECT  MAX(rs.start_datetime)-NVL(NVL(functioApi.Get_Snap_Time(rs.company_id,rs.emp_no),functioApi1.Get_Snap_Time(rs.company_id,rs.resource_type)),0)
                                                 FROM  view4 sse
                                                WHERE  se.resource_id = sse.resource_id
                                                  AND  SYSDATE <= sse.end_datetime);
执行上述查询大约需要5个小时。瓶颈在于子查询中的MAXrs.start\u datetimein部分。我尝试了几个选项,但没有选择所需的数据或没有性能改进。 这里是view2,它从与另一个视图组合的全局临时表中获取数据 首先,我要为这个全局临时表创建一个索引,然后上面的语句在运行时不会获取数据


感谢您提出的任何改进建议。

如果不知道目的和一些示例数据,您将很难获得帮助

一个起点可以是:

WITH t AS (
    SELECT sse.resource_id, MAX(rs.start_datetime) AS MAX_start_datetime
    FROM view4 sse
    WHERE SYSDATE <= sse.end_datetime
    GROUP BY resource_id)
SELECT DISTINCT se.id, se.date_time_stamp, se.event_date_time, se.event_type_id, se.resource_id
FROM view1 se
   JOIN view2 rs ON se.resource_id = rs.resource_id
WHERE EXISTS (SELECT 1
               FROM view3 ds
               WHERE ds.dataset_id = dataset_id_
                   AND rs.contract = ds.contract
                   AND rs.active ='TRUE')
    AND se.event_type_id  IN ('BO','BF')      
    AND se.event_date_time >= (
        SELECT MAX_start_datetime - NVL(NVL(functioApi.Get_Snap_Time(rs.company_id,rs.emp_no),functioApi1.Get_Snap_Time(rs.company_id,rs.resource_type)),0))
        FROM t
        WHERE se.resource_id = t.resource_id)

如果不知道数据库版本、执行计划、调用的函数是什么,这里的任何人怎么能帮助您呢。。。。帮助我们帮助你。如果创建索引使查询不返回任何行,而它确实返回没有索引的内容,那肯定是一个bug。db veriosn是12c 12.1.0.1.0版。正如我提到的,问题是在MAX函数中,而不是在function API中。如果需要,可以忽略该部分。索引在哪里?