У меня есть этот запрос
DECLARE @Company VARCHAR(20) = 'ABC'
DECLARE @Train INT = 1
SELECT L.*
FROM vemd_episodes_firstnet_currentPatients L
INNER JOIN vemd_episodes E ON E.Company = L.Company
AND E.cpid = L.cpid
AND E.dDate = L.dDate
WHERE L.Company = @Company
AND ((census_datetime NOT IN (SELECT MAX(census_datetime) FROM vemd_episodes_firstnet_currentPatients ) AND @Train = 1)
OR (census_datetime IN (SELECT MAX(census_datetime) FROM vemd_episodes_firstnet_currentPatients ) AND @Train = 0))
Для завершения требуется вечность.
Через 1 минуту он извлекает только 400 записей и все еще работает.
Общее количествозаписей для этого запроса должно быть около 500 000 записей.
Но когда я жестко закодирую параметры в запросе
SELECT L.*
FROM vemd_episodes_firstnet_currentPatients L
INNER JOIN vemd_episodes E ON E.Company = L.Company
AND E.cpid = L.cpid
AND E.dDate = L.dDate
WHERE L.Company = 'ABC'
AND ((census_datetime NOT IN (SELECT MAX(census_datetime) FROM vemd_episodes_firstnet_currentPatients ) AND 1 = 1)
OR (census_datetime IN (SELECT MAX(census_datetime) FROM vemd_episodes_firstnet_currentPatients ) AND 1 = 0))
он очень быстрый и извлекает 500 тыс. записей за 16 секунд.
Почему использование параметров в предложении where
вызывает эту проблему?И как это исправить?
Редактировать:
Я не мог продолжать работать до конца
, поэтому я выбираютоп 1000 и получил план выполнения