Множественное условие ИЛИ в 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).

Другие вопросы по тегам