Выбрать клиенов (маленькая таблица) которых нет в лога (большая)
select b.ClientCode
from branchs b (nolock)
where b.id not in (select distinct(no) from sv_LogInfo where ProcessID = 10)
Оптимизатор предлагает вложенный цикл со сканом по большой таблице:
|--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([b].[Id]))
|--Clustered Index Scan(OBJECT:([BASE].[dbo].[Branchs].[IBranchId] AS [b]))
|--Top(TOP EXPRESSION:((1)))
|--Clustered Index Scan(OBJECT:([BASE].[dbo].[LogInfo].[ILogInfoDate] AS [x]), WHERE:([BASE].[dbo].[Branchs].[Id] as [b].[Id]=[BASE].[dbo].[LogInfo].[No] as [x].[No] AND [BASE].[dbo].[LogInfo].[ProcessId] as [x].[ProcessId]=(10)))
Как бы заставить его сначала выбрать distinct(no), а затем перейти к клиентам?