МЕДЛЕННЫЙ бегущий запрос в доступе MS - PullRequest
0 голосов
/ 04 мая 2020

Что заставило этот запрос выполняться долго. Блок подзапросов создает беспорядок?

SELECT WD.IdentityUserID, WD.Email, AD.mail
FROM WD INNER JOIN AD ON WD.IdentityUserID = AD.GGDComputerUserId
WHERE (((AD.mail) Not In (SELECT EMAIL FROM WD)));

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Я полагаю, что проблема в том, что для каждой записи INNER JOIN вы перебираете все записи таблицы WD.

SELECT WD.IdentityUserID, WD.Email, AD.mail
FROM WD 
INNER JOIN AD ON WD.IdentityUserID = AD.GGDComputerUserId
WHERE NOT EXISTS(SELECT EMAIL FROM WD WHERE EMAIL = AD.mail);
0 голосов
/ 04 мая 2020

Не уверен, поможет ли это, но вы можете попытаться уменьшить размер «правой стороны» объединения, предварительно отфильтровав электронные письма:

SELECT  
 WD.IdentityUserID,  
 WD.Email,  
 T.mail  
FROM WD  
INNER JOIN  
 (  
    SELECT
     mail,  
     GGDComputerUserId     
    FROM AD  
    WHERE  
     mail Not In (SELECT EMAIL FROM WD)  
 ) T  
ON WD.IdentityUserID = T.GGDComputerUserId;  

(В случае, если запрос уже выполняется оптимизирован для этого, тогда это не будет иметь никакого значения, хотя)

...