2013-04-03 3 views
3

У меня есть запрос, который считывает около 342 записей из одной таблицы и проверяет, нет ли записей в другой таблице с примерно 32000 записей. для этого я использовал условие «НЕ IN» и что лучший способ быстрее запускать запрос с условием «НЕ IN», как показано ниже, что похоже на то, что процесс хочет занять всю мою жизнь!запрос с условием «НЕ IN» слишком медленный

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

Что я действительно должен был делать?

+2

На самом деле это не полный запрос, во внутреннем select отсутствует 'FROM'. – scones

+0

FoolishSeth, нет, это не медленное само по себе! – goseo

+0

Да, из отсутствует, но очевидно, что из предложения - проект, который я пропустил! : D – goseo

ответ

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.ID и projects.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

NOT IN, как правило, очень медленный, и это предложение является наилучшей возможностью снижения времени без какой-либо структурной работы с базой данных. – 0xCAFEBABE

0
SELECT fname,lname,position 
FROM employees 
WHERE NOT EXISTS 
(select * where projects.id='BRS213F-013' AND employees.id = projects.empid) 
Смежные вопросы