Для эффективного решения таких задач СУБД применяет операцию полусоединения - SEMI JOIN
Как она работает?
В отличие от обычного JOIN полусоединение находит первую удовлетворяющую условию запись, а не перебирает их все, исключая повторы в итоговой выборке. SEMI JOIN отсутствует в синтаксисе явно, но существует как внутренний механизм исполнения в сервере.
Начиная с РЕД Базы Данных 5.1 оптимизатор теперь автоматически выбирает стратегию полусоединения: HASH JOIN (semi) или NESTED LOOP JOIN (semi). Критерием выбора служит размер внешнего потока данных. Если ожидается небольшое количество записей, применяется NESTED LOOP, для крупных данных — HASH JOIN.
Преимущества
- Повышение производительности запросов с IN/EXISTS на порядок.
Скачивайте РЕД Базу Данных 5.1.2