优化查询

时间:2012-07-12 00:43:02

标签: sql oracle

我已经搜索了网络,试图解决这个问题,但没有运气。这也是我在SO上的第一个SQL问题: - )

我只是一个简单的查询简单的人 - 允许我演示

select asy.aim_student_id, ast.aim_test  
from aim_student_test ast
  join aim_student_absent asa on (asa.aps_yr = ast.aps_yr and asa.aim_test = ast.aim_test and asa.aim_id = ast.aim_id)
  --join aim_student_qst asq on (asq.aps_yr = ast.aps_yr and asq.aim_test = ast.aim_test and asq.aim_id = ast.aim_id)
  join aim_student_yr asy on (asy.aps_yr = ast.aps_yr and asy.aim_student_yr_id = ast.aim_student_yr_id)
    where ast.aps_yr = '2012'

如您所见 - 加入aim_student_qst已被注释掉。

aim_student_qst是一个表格,列出了学生对所有问题的回答。所以一个学生在这个表中会有大约50个案例。为了测试什么减慢了我的查询,我只是注意到了aim_student_qst的加入,果然我的查询加速了。

我认为Oracle正在做的事情 - 哦,你想要那些表,让我们把它们放在一个大表中然后找我们想要的东西。这就是为什么我的查询速度较慢,尽管没有用aim_student_qst做任何其他事情。这是对的吗?

就我的目的而言,我只需要为每个学生选择一个问题,而不是全部50个问题。有没有办法做到这一点?

三江源!!!!!

1 个答案:

答案 0 :(得分:1)

也许这样呢?

select asy.aim_student_id, ast.aim_test  
from aim_student_test ast
  join aim_student_absent asa on (asa.aps_yr = ast.aps_yr and asa.aim_test = ast.aim_test and asa.aim_id = ast.aim_id)
  join aim_student_qst asq on (asq.aps_yr = ast.aps_yr and asq.aim_test = ast.aim_test and asq.aim_id = ast.aim_id)
  join aim_student_yr asy on (asy.aps_yr = ast.aps_yr and asy.aim_student_yr_id = ast.aim_student_yr_id)
where ast.aps_yr = '2012'
  and asq.question_number = 1 -- column name assumed
  and asq.question_answer is NULL -- column name and value assumed
;
相关问题