sql关联查询搜索的优化实践

50 阅读1分钟

在多表的条件搜索中,一般将所有需要的表全部关联在一起,然后再构造搜索条件。但这往往会把暂不需要的表也关联在一起。
例如:在搜索学生时,可以选择搜索某部门的学生,需要关联部门表:

select s.name,s.age,d.name 
from stu s 
    left join dept d 
        on s.stuId = d.stuId 
where s.del_flag = '0'

但是如果查询所有学生,那么就不需要关联部门了:

select s.name,s.age,d.name 
from stu s 
    <if test="dept.name !=null and dept.name != ''"> 
        left join dept d 
        on s.stuId = d.stuId 
    </if> 
where s.del_flag = '0'

或者可以进一步优化sql,需要什么字段,关联时就查询什么字段:

select s.name,s.age,d.name 
from stu s 
    <if test="dept.name !=null and dept.name != ''"> 
        left join (select name,num from dept) d 
        on s.stuId = d.stuId 
    </if> 
where s.del_flag = '0'

仅作学习记录。