Множественное условие ИЛИ в SQL-запросе
Приведенный ниже запрос требует больше времени для выполнения, так как таблица содержит более 50 миллионов записей, и кажется, что условие OR неверно в запросе .... Кто-нибудь может предоставить оптимизированную версию для моего запроса. Ценить..!!
DECLARE @LastRunDate DATETIME
SELECT @LastRunDate=LastRunDateTime FROM [DataAudit].[t_DeltaSetting] da
WHERE da.[InterfaceName] = 'ATKInnovationTargetedCustomersToHANA'
SELECT distinct (initi.RecordID )
from WebData.t_Initiative initi
inner join WebData.t_InitiativeCustomer ic on initi.RecordID=ic.InitiativeId
inner join WebData.t_Tracker track on track.InitiativeId = initi.RecordID
inner join WebData.t_TrackerCustomer tc on tc.TrackerId=track.RecordID
where (initi.UpdatedDate > @LastRunDate)
or (ic.UpdatedDate > @LastRunDate)
or (track.UpdatedDate > @LastRunDate)
or (tc.UpdatedDate > @LastRunDate)
1 ответ
Попробуйте использовать
union
:
SELECT initi.RecordID
FROM WebData.t_Initiative initi
WHERE initi.UpdatedDate > @LastRunDate
UNION
SELECT ic.InitiativeId
FROM WebData.t_InitiativeCustomer ic
WHERE ic.UpdatedDate > @LastRunDate
UNION
SELECT track.InitiativeId
FROM WebData.t_Tracker track
WHERE track.UpdatedDate > @LastRunDate
UNION
SELECT tc.TrackerId
FROM WebData.t_TrackerCustomer tc
WHERE tc.UpdatedDate > @LastRunDate;
Это предполагает, что
InitiativeID
всегда действительный
RecordID
. Если нет, вам понадобится дополнительная логика для этой проверки (используя
JOIN
,
IN
, или
EXISTS
).