Слишком медленное соединение и обработка в SQL Server для больших наборов данных - PullRequest
0 голосов
/ 08 сентября 2018

Мы обнаружили, что следующий запрос занимает около часа и загружает более 1000 записей. С более чем 3 миллионами записей в таблице 'q' и файлах таблиц f имеется около 2 миллионов. Любая рекомендация о том, как ускорить это?

Select 
    q.Id, vStorageId,vRootId, q.vPath, p.[FileName], 
    p.Original, p.[User],
    IsNull(p.[Size], 0) as FileSize, p.[Extension], p.Encode, 
    p.[IsPicture], p.IsUploaded, 
    (Case when p.IsDirectory=1 then GetUtcDate() else p.Time end) as [Modified],
    IsNull(p.[Created], getUTCDate()) as [Created], 
    IsNull(p.IsDirectory,0) as IsDirectory
from 
    Ques q
cross apply 
    openJson(Request,'$.created') 
        WITH([Message] nvarchar(255) '$.message',  
             [FileName] nvarchar (1024) '$.name',  
             Original nvarchar (1024) '$.name',  
             [User] nvarchar (1024) '$.user', 
             [Size] bigint '$.size',  [Extension] nvarchar (255) '$.ext',  
             Encode bit '$.encode',  [IsPicture] bit '$.picture',  
             IsUploaded bit '$.uploaded', 
             [Time] DateTime2 '$.time',  [Created] DateTime2 '$.created',  
             IsDirectory int '$.dir') p
left join 
    dbo.Files f on f.[vPath] = q.[vPath] 
                and f.[FileName] = p.[FileName] 
                and q.vStorageID = f.StorageID
where 
    topic = 'Scan' 
    and State = 4 
    and f.Id is null;
...