Я бы написал запрос, используя =
вместо IN
:
SELECT 1
FROM EMPLOYEE E JOIN
EMPLOYEE_HISTORY EH
ON EH.EMPLOYEE_ID = E.EMPLOYEE_ID AND
EH.CREATE_DATE = (SELECT MAX(EH2.CREATE_DATE)
FROM EMPLOYEE_HISTORY EH2
WHERE EH2.EMPLOYEE_ID = EH.EMPLOYEE_ID
);
IN
является более общим, чем =
для сравнения.
Ваш первичный ключевой индекс должен использоваться для подзапроса, что должно сделать его довольно быстрым.
Если вы действительно хотите вернуть фактические столбцы, тогда я не уверен, есть ли способ сделать это быстрее.
Если вы действительно выбираете только 1
, забудьте о самой последней записи и просто используйте EXISTS
:
SELECT 1
FROM EMPLOYEE E
WHERE EXISTS (SELECT 1
FROM EMPLOYEE_HISTORY EH2
WHERE EH2.EMPLOYEE_ID = E.EMPLOYEE_ID
);
Единственным дополнительным условием, которое проверяет ваш запрос, является то, что CREATE_DATE
не равен NULL, но я предполагаю, что это всегда так.