«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу эффективно выбирать строки из одной таблицы, которых нет в другой?

Как я могу эффективно выбирать строки из одной таблицы, которых нет в другой?

Опубликовано 3 ноября 2024 г.
Просматривать:657

 How Can I Efficiently Select Rows from One Table That Don\'t Exist in Another?

Оптимизация SQL-запросов с помощью таблиц «НЕ В»

В 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