Я работаю над созданием отчетов для данных, содержащихся в большой существующей базе данных Access (~ 500 МБ после сжатия и восстановления), и у меня возникли проблемы с медленным подзапросом.
База данных имеет большую таблицу, в которой содержится запись о каждой покупке клиента. Вот простой запрос, который находит клиентов, которые купили синий виджет. Он завершается за несколько секунд и возвращает около десяти тысяч записей.
SELECT DISTINCT CustomerId
FROM ProductSales
WHERE Product = 'BLUE'
Вот запрос, который пытается найти клиентов, которые купили синий виджет, но не красный виджет. Это займет около часа.
SELECT DISTINCT CustomerId FROM ProductSales
WHERE Product = 'BLUE'
AND CustomerId NOT IN (
SELECT CustomerId
FROM ProductSales
WHERE Product = 'RED'
)
Есть ли способ реорганизовать второй запрос, чтобы он занимал несколько минут вместо часа?