使用with子句时报告性能不佳

时间:2017-06-29 23:12:56

标签: sql performance oracle12c

两次或多次加入大桌子的最佳方法是什么? 例如,在这个虚构的例子中,我们有学生表,学生记录有TUTOR_ID列是对同一个表的引用给另一个学生。

我想要完成的是一份报告,找到所有同一学生的导师。

所以我建立了一个这样的查询:
第一次找到父母子女关系
第二次找到共享同一学生的所有导师

我尝试使用“with子句”但查询性能确实很差 有更好的方法吗?

 WITH STUDENT_TMP_TABLE AS (
select 
TUTORS.STUDENT_IDENTIFIER as TUTOR_STUDENT_IDENTIFIER,
CADETS.STUDENT_IDENTIFIER as CADET_STUDENT_IDENTIFIER
FROM V_STUDENTS_RELATIONS  TUTORS 
INNER JOIN V_STUDENT_RELATIONS  CADETS   ON CADETS.TUTOR_ID = TUTORS.STUDENT_IDENTIFIER AND TUTORS.TUTOR_ID IS NULL
    WHERE -- ? conditions truncated
)
SELECT 
*
FROM STUDENT_TMP_TABLE STUD_TMP1
JOIN STUDENT_TMP_TABLE STUD_TMP2 
    ON STUD_TMP1.TUTOR_STUDENT_IDENTIFIER <> STUD_TMP2.TUTOR_STUDENT_IDENTIFIER 
    AND STUD_TMP1.CADET_STUDENT_IDENTIFIER = STUD_TMP2.CADET_STUDENT_IDENTIFIER;

0 个答案:

没有答案
相关问题