Подтвердить что ты не робот

Может ли INNER JOIN предлагать лучшую производительность, чем EXISTS

Я изучаю улучшение производительности в рамках ряда процедур, и недавно коллега упомянул, что он достиг значительных улучшений производительности при использовании INNER JOIN вместо EXISTS.

Как часть расследования относительно того, почему это могло быть, я думал, что задаю здесь вопрос.

Итак:

  • Может ли INNER JOIN предлагать лучшую производительность, чем EXISTS?
  • Какие обстоятельства могут произойти?
  • Как я могу установить тестовый пример в качестве доказательства?
  • Есть ли у вас полезные ссылки для дальнейшей документации?

И действительно, любой другой опыт, который люди могут затронуть на этот вопрос.

Я был бы признателен, если бы какие-либо ответы могли конкретно решить этот вопрос без каких-либо предположений о других возможных улучшениях производительности. У нас уже был довольно большой успех, и меня просто интересовал этот предмет.

Любая помощь будет высоко оценена.

4b9b3361

Ответ 1

Вообще говоря, INNER JOIN и EXISTS - разные вещи.

Первый возвращает дубликаты и столбцы из обеих таблиц, последний возвращает одну запись и, будучи предикатом, возвращает записи только из одной таблицы.

Если вы выполняете внутреннее соединение в столбце UNIQUE, они демонстрируют такую ​​же производительность.

Если вы выполняете внутреннее соединение в наборе записей с приложенным DISTINCT (чтобы избавиться от дубликатов), EXISTS обычно быстрее.

IN и EXISTS (с эквидиональной корреляцией) обычно используют один из нескольких алгоритмов SEMI JOIN, которые обычно более эффективны, чем a DISTINCT в одной из таблиц.

Смотрите эту статью в своем блоге:

Ответ 2

Может быть, может и нет.

  • Тот же самый план будет сгенерирован скорее всего
  • В INNER JOIN может потребоваться DISTINCT для получения того же выхода
  • EXISTS имеет дело с NULL