首页 > 解决方案 > oracle查询的查询优化

问题描述

我对查询优化知之甚少,在这里我需要一些帮助。这是我们项目的示例代码,它长期运行的 oracle 查询从 2 个不同的表(student、student_info)中提取数据。

有没有可能优化这个?where子句“和”操作在这里如何工作?

它在执行 AND 子句时是否保持任何顺序?以下查询如何通过删除 line 的代码使之前和之后有所不同b.student_id in ('a123','b123','c123')

我们无权在该表列上添加索引。

我们如何在不创建索引的情况下提高性能。

select a.student_id
       max(decode(a.marks_limit, 99.99,100,null )) as max_marks,
       b.student_city_code "NYC",
from student a, 
     student_info b
where a.student_id=b.student_id
  and a.student_id in ('a123','b123','c123')
  and b.student_id in ('a123','b123','c123')
  and  b.adress_modified > TO_TIMESTAMP('2003/12/13 10:13:18', 'YYYY/MM/DD HH:MI:SS')
  group by a.student_id, b.student_city_code;

标签: sqloraclequery-optimization

解决方案


只是一些建议。

你已经 a.student_id=b.student_id 所以条件 b.student_id 在 ('a123,'b123','c123') 只是一个有用的重复你还应该使用显式连接符号而不是基于 where 子句的旧隐含符号

   select a.student_id
    max(decode(a.marks_limit, 99.99,100,null )) as max_marks,
    b.student_city_code "NYC",
    from student a
    INNER JOIN  student_info b ON a.student_id= b.student_id
    WHERE 
    and a.student_id in ('a123','b123','c123')
    and  b.adress_modified > TO_TIMESTAMP('2003/12/13 10:13:18', 'YYYY/MM/DD HH:MI:SS')
    group by a.student_id, b.student_city_code

为了获得更好的性能,您应该检查表上的复合索引

 student_info ( adress_modified, student_id )

或者

student_info ( adress_modified, student_id, student_city_code )

推荐阅读