繁体   English   中英

Oracle Sql 性能很慢

[英]Oracle Sql performance very slow

我在 Oracle 中创建了一个连接多个表的查询,但是执行时间很慢,大约 1-2 分钟。 有没有一种方法可以使查询更快?

SELECT S.ID STAFF_ID,
        d.year_enrol,
        C.COUNSELLOR_ID,
        count(*) Num_Of_Stud
FROM aab_ASSIGNED_COUNSELLOR C,
     aab_STAFF S,
     v_aab_student d
WHERE C.COUNSELLOR_ID = S.COUNSELLOR_ID
  AND SYSDATE BETWEEN C.EFFECTIVE_DATE_FM AND C.EFFECTIVE_DATE_TO
  AND C.HOST_COUNSELLOR_IND = 'Y'
  AND c.student_num = d.student_num
  AND (d.prog_code, d.subcode) NOT IN (('11345',' '),
                                       ('22678',' '),
                                       ('93451', ' '),
                                       ('62378','OPT'))
GROUP BY S.ID,
         d.year_enrol,
         C.COUNSELLOR_ID;

您应该为where部分中涉及的每个变量创建索引。 您可以为所有字段创建简单索引或组合。

WHERE上的每个字段Create Index ,而不仅仅是主键

aab_ASSIGNED_COUNSELLOR

COUNSELLOR_ID 
EFFECTIVE_DATE_FM 
HOST_COUNSELLOR_IND 
student_num 

aab_STAFF

COUNSELLOR_ID

v_aab_student

student_num
prog_code
subcode

您也可以使用解释计划来查看查询的内容。 有时即使您添加索引,规划器也决定不使用它。 这取决于您的数据大小。

添加了注释。

使用INNER JOIN而不是WHERE语法,这不会提高性能只是为了更好的阅读

您可以尝试创建一个隐式表而不是使用IN 使用Left JOINT.prog_code IS NULL来解决问题。

SELECT     s.id staff_id, d.year_enrol, c.counsellor_id, Count(*) num_of_stud 
FROM       aab_assigned_counsellor C 
INNER JOIN aab_staff S, 
        ON c.counsellor_id = s.counsellor_id 
INNER JOIN v_aab_student D 
        ON c.student_num = d.student_num 
LEFT JOIN 
           ( 
               SELECT '11345' prog_code,  ' '     subcode 
               UNION 
               SELECT '22678' prog_code,  ' '     subcode 
               UNION 
               SELECT '93451' prog_code,  ' '     subcode 
               UNION  
               SELECT '62378' prog_code,  'OPT'   subcode 
           ) AS T
       ON  D.prog_code = T.prog_code 
      AND  D.subcode = T.subcode 
WHERE      C.host_counsellor_ind = 'Y' 
AND        T.prog_code IS NULL 
AND        sysdate BETWEEN C.effective_date_fm AND C.effective_date_to 
GROUP BY   S.id, D.year_enrol, C.counsellor_id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM