В SQL выбор строк, которые существуют в одной таблице, но отсутствуют в другой, может быть достигнут с помощью «НЕ В» оператор. Однако этот подход иногда может привести к проблемам с производительностью для больших наборов данных.
Рассмотрим сценарий, в котором у вас есть две таблицы, A и B, с одинаковыми первичными ключами. Чтобы выбрать все строки из A, которых нет в B, вы можете использовать следующий запрос:
SELECT *
FROM A
WHERE NOT EXISTS (
SELECT *
FROM B
WHERE A.pk = B.pk
);
Хотя этот запрос работает, он может быть неэффективным, особенно для больших таблиц. База данных должна выполнить вложенный запрос для каждой строки в A, проверяя ее наличие в B.
Лучший подход — использовать левое соединение и фильтровать результаты на основе нулевых значений. Этот метод предполагает объединение A и B в общем столбце, а затем выбор строк из A, где соответствующий столбец в B имеет значение NULL:
SELECT A.*
FROM A
LEFT JOIN B
ON A.x = B.y
WHERE B.y IS NULL;
Этот запрос выполняет одну операцию соединения и фильтрует результаты на основе отсутствия значения в B. Обычно это быстрее, чем подход «NOT IN» для больших наборов данных.
В качестве альтернативы вы можете использовать подзапрос в предложении WHERE:
SELECT A.*
FROM A
WHERE x NOT IN (
SELECT y
FROM B
);
Этот подход также может обеспечить хорошую производительность для больших наборов данных.
В конечном счете, лучший метод оптимизации запроса зависит от конкретных данных и конфигурации базы данных. Рекомендуется протестировать разные подходы и выбрать тот, который обеспечивает оптимальную производительность для вашего запроса.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3