Я работаю над созданием отчетов для данных, содержащихся в большой уже существующей базе данных 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'
)
Есть ли способ рефакторинга второго запроса, чтобы он занимал несколько минут вместо часа?