PostgreSql查询,性能不是IN,LEFT OUTER JOIN

时间:2014-02-07 04:14:52

标签: postgresql postgresql-performance

我有Table员工,Table sport有n到m的关系,这意味着,我还有一个表,让我们说表emp_sport

表员工

emp_id emp_name
------------------
e1 name1
e2 name2
e3 name3
e4 name4

table sport
sport_id sport_name
---------------------
sp1 spName1
sp2 spName2
sp3 spName3

table emp_sport
emp_id sport_id
-------------------
e1   sp1
e1   sp2
e1   sp3
e2   sp2

我想从这样的员工中选择数据

select distinct(e.emp_id), e.emp_name 
from employee e 
where e.emp_id not in (select sp.emp_id from sport_emp sp where sp.sport_id = 'sp1')

结果,我有

e2 name2
e3 name3
e4 name4

问题是,当我在表employee和emp_sport中有非常大的数据时,查询非常慢。

1 个答案:

答案 0 :(得分:0)

如果可能,请始终使用联接。子查询永远是缺乏绩效的原因。

试一下

select e."emp_id",e."emp_name"
from "employee" e
inner join "emp_sport" es on es."emp_id"=e."emp_id"
where es."sport_id"='sp1'
group by e."emp_id",e."emp_name"