|
![]() |
#1 |
Участник
|
|
|
![]() |
#2 |
Участник
|
Cross Join по факту умножает кол-во записей между собой.
+ Where отрабатывает только в после объединения Cross. В случае Inner Join ON сначала ограничивает выборку, затем объединяет только по нужным. В желаемом варианте исключена избыточная перекрестная выборка, а также исключена излишняя выборка из-за переноса условий в блок ON. Нет, точно не используется ![]() У меня подозрение в сторону каких-то параметров таблиц. Возможно в Relation свойства надо другие ставить, может ли это влиять или точно нет? |
|
![]() |
#3 |
Участник
|
Цитата:
Все зависит от того, как распределены данные (статистика), какие именно созданы индексы и еще кучи других условий Вот вам два разных запроса, с абсолютно одинаковыми планами X++: select top 100 * from INVENTJOURNALTABLE ij inner join INVENTJOURNALTRANS ijt on ij.DATAAREAID = ijt.DATAAREAID and ij.JOURNALID = ijt.JOURNALID where ij.JOURNALTYPE = 0 X++: select top 100 * from INVENTJOURNALTABLE ij cross join INVENTJOURNALTRANS ijt where ij.DATAAREAID = ijt.DATAAREAID and ij.JOURNALID = ijt.JOURNALID and ij.JOURNALTYPE = 0 По поводу хинта forceNestedLoop. Он, в принципе, наоборот заставит использовать inner join, но с обязательным хинтом inner loop join. Т.е. будет принудительно устанавливаться алгоритм объединения
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#4 |
Участник
|
Цитата:
![]() |
|
Теги |
cross join, inner join, sql 2014 |
|
|