'NOT IN'条件的查询太慢了

时间:2013-04-03 05:45:31

标签: mysql sql query-optimization

我有一个查询从一个表中读取大约342条记录,并检查另一个表中是否存在大约32000条记录的记录。为此,我使用了'NOT IN'条件,并且在'NOT IN'条件下更快地运行查询的最佳方法是看起来这个过程想要占用我的生命!

SELECT fname,lname,position 
FROM employees 
WHERE employees.id NOT IN(select projects.empid where projects.id='BRS213F-013')

我真的应该做什么?

3 个答案:

答案 0 :(得分:6)

如何使用LEFT JOIN

SELECT  a.fname, a.lname, a.position 
FROM    employees a
        LEFT JOIN projects b
            ON  a.ID = b.emp_ID AND
                b.id = 'BRS213F-013'
WHERE   b.emp_ID IS NULL

确保Employees.IDprojects.emp_ID必须在其上定义键才能提高性能。


要使Employees.ID成为主键,如果尚未实现,

ALTER TABLE Employees ADD CONSTRAINT tb_pk PRIMARY KEY (ID)

要使projects.emp_ID成为引用Employees.ID的外键(如果尚未实现)

ALTER TABLE Projects 
ADD CONSTRAINT tb_fk FOREIGN KEY (EmpID) REFERENCES Employees (ID)

答案 1 :(得分:0)

SELECT fname,lname,position 
FROM employees 
WHERE NOT EXISTS
(select * where projects.id='BRS213F-013' AND employees.id = projects.empid)

答案 2 :(得分:0)

NOT EXISTS比

更有效