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中。如果需要,可以忽略该部分。索引在哪里?