Преимущества INNER JOIN перед CROSS APPLY - PullRequest
0 голосов
/ 13 сентября 2018

Из того, что я читал о CROSS APPLY, оно кажется лучше, чем INNER JOIN, его можно использовать в табличных выражениях, оно быстрее и т. Д.

Так зачем вообще использовать INNER JOIN?

источники: 1 , 2

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Я бы определенно предпочел INNER JOIN, когда достаточно для ваших целей - там, где вы не хотите / не должны (возможно) контролировать поведение для каждой строки.Он реализован во всех базах данных SQL (где CROSS APPLY не обязательно доступен везде) и позволяет избежать когнитивных издержек там, где это не нужно.

Например, у вас нет будущего читателя, пытающегося понять, почему вы 'мы использовали CROSS APPLY только для них через 1, 5 или 30 минут, чтобы сделать вывод: «Я думаю, это должно быть просто INNER JOIN».Теперь они сомневаются в себе, и вы сделали ваш запрос более сложным для быстрого понимания.Сохраните его там, где это необходимо , необходимо , и тогда оно будет выделено «обращайте больше внимания здесь».

0 голосов
/ 20 сентября 2018

Я сомневаюсь, что это быстрее, даже если объединить всего 2 таблицы в одном простом условии от столбца к столбцу. Оптимизатор SQL внутренне преобразует перекрестное применение во внутреннее соединение, когда это возможно, но обратного не происходит. Когда перекрестное применение не может быть преобразовано во внутреннее объединение, тогда это должно было выполняться в каждой строке. Здесь важно только то, как часто меняются значения предложения, поэтому необходимо пересчитать выражение. Лично я не использую кросс-кантри, если у меня нет выбора, например, табличные функции.

0 голосов
/ 13 сентября 2018

Вы всегда можете использовать CROSS APPLY там, где вы используете INNER JOIN.

В случае, если эти два значения эквивалентны, оптимизатор SQL Server не рассматривает их по-разному в моем опыте.Поэтому я не придерживаюсь мнения, что CROSS APPLY быстрее.Если сравнивать яблоки с яблоками, то производительность во всех планах запросов, которые я видел, одинакова.

INNER JOIN удобнее писать.Кроме того, это идиоматично.Поэтому он наиболее разборчивый и ремонтопригодный.INNER JOIN также более широко поддерживается, хотя это, вероятно, не имеет значения для SQL Server.Я также считаю, что многие разработчики просто не знают CROSS APPLY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...