Более эффективный доступ к SQL-запросам

У меня есть SQL-запрос, который работает, когда количество значений невелико, но в этом случае у меня около 5500 значений в моей таблице «customerListLINKED», и выполнение запроса занимает около 20 минут. Есть ли более эффективный способ написать с запросом?

SELECT 
    CustomerListLINKED.Base8, 
    (COUNT (Filtered_ZFEWN.Notification)) AS [Historical Count of Jobs]
FROM 
    CustomerListLINKED 
LEFT JOIN 
    Filtered_ZFEWN ON CustomerListLINKED.Base8 = Filtered_ZFEWN.[Base 8]
WHERE 
    Filtered_ZFEWN.[Base 8] IN (SELECT CustomerListLINKED.Base8 
                                FROM CustomerListLINKED) 
GROUP BY 
    Filtered_ZFEWN.[Base 8], CustomerListLINKED.Base8;

Я использую MS Access.


person Analyst123456789    schedule 11.07.2018    source источник


Ответы (1)


Вы должны иметь возможность просто использовать INNER JOIN и обойтись без предложения IN:

SELECT CustomerListLINKED.Base8, COUNT(Filtered_ZFEWN.Notification) AS 
[Historical Count of Jobs]
FROM CustomerListLINKED INNER JOIN
     Filtered_ZFEWN
     ON CustomerListLINKED.Base8 = Filtered_ZFEWN.[Base 8]
GROUP BY CustomerListLINKED.Base8;

Вам нужен индекс на Filtered_ZFEWN([Base 8]).

person Gordon Linoff    schedule 11.07.2018
comment
Ну, я не могу использовать внутреннее соединение, мне придется сохранить левое соединение, но я думаю, что моя проблема в том, что я не знал, что вы можете использовать предложение Group By без предложения Where. Должно быть, это было недоразумение в моих знаниях. Я проведу несколько тестов, чтобы убедиться, что это дает те же результаты на меньшем наборе данных, и приму ответ, если он будет проверен точно. Спасибо за помощь - person Analyst123456789; 11.07.2018