Вот еще один вариант запроса
select
distinct e.EmployeeId FROM employees e
left join attendance a on e.EmployeeId = a.EmployeeId and a.AttendanceDate = '2015-01-20'
where
e.status='Active'
and e.BranchId= '2'
and a.EmployeeId is null
Вам также потребуется некоторые показатели, которые должны применяться на столах, как
alter table employees add index st_br_idx(status,BranchId);
alter table AttendanceDate add index AttendanceDate_idx(AttendanceDate);
если EmployeeID не является внешним ключом, то нет необходимости для добавления индекса else, если индекс еще не существует, вам может понадобиться следующее:
alter table AttendanceDate add index EmployeeId_idx(EmployeeId);
Если EmployeeId
является первичным ключом в employees
, то его уже проиндексированы, если и не индексируются вам может понадобиться добавить индекс для этого, а также
alter table employees add index EmployeeId_idx(EmployeeId);
Вы также можете проверить свой исходный запрос после того, как выше показателей
SELECT DISTINCT e.EmployeeId FROM employees e
WHERE
e.status='Active'
and e.BranchId= '2'
and NOT EXISTS (
SELECT 1 FROM
attendance a WHERE e.EmployeeId = a.EmployeeId
and a.AttendanceDate='2015-01-20'
)
для анализа использования запроса explain select..
и посмотреть, как оптимизатор использует индексы и возможное число строк, оптимизатор может сканировать для извлечения записей
Спасибо большое .. –
Добро пожаловать! –