Текущее время: Пн, июл 14 2025, 14:22

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Join
СообщениеДобавлено: Ср, ноя 04 2009, 15:11 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
Hello,
есть один вопрос вокруг которого возникли споры нужно ли писать в join ксловие на mandant (client) в условиях соединения таблиц, и насколько такое условие замедлит работу?

пример1
Code:
Select  b~partner z~ZCLIENTCAT
    from but000 as b
        INNER JOIN bbpd_pd_index_h as h
                on h~partner_no = b~partner_guid
                        INNER JOIN bbpd_pd_index_i as i
                                 on h~header_guid = i~header_guid
                                        INNER JOIN BBP_PDISC as z
                                              on i~item_guid = z~guid
                                                    INNER JOIN crm_jest as j
                                                       on j~objnr = i~header_guid

                                                  into table it_vend

                                           WHERE h~created_at >= ausw_zeit_anf AND
                                                 h~created_at <= ausw_zeit_end AND
                                                 h~partner_fct = '00000019' AND
                                                 z~zno_spotbuy = space AND
                                                 z~zincomplete = space AND
                                                        j~stat = 'I1043' AND
                                                       j~inact = space

код не мой так что прошу не ругать за 5 join-ov

икак Вы считаете что будет быстрее такой селект (5 join)или если наприер join
Code:
         INNER JOIN crm_jest as j
                                                       on j~objnr = i~header_guid
спрятать в условие
Code:
EXISTS ( SELECT  *  FROM crm_jest
                                                WHERE objnr = i~header_guidAND
                                                      stat = 'I1043' AND
                                                      inact = space )


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Ср, ноя 04 2009, 15:37 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Трудно так вот сразу сказать не видя таблиц (CRM походу ?)
Прогоните трассировщиком, посмотрите план выполнения.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Ср, ноя 04 2009, 15:48 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
SRM, =)
под трасировщиком имеете ввиду SE30 или st05?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Ср, ноя 04 2009, 15:59 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
DaV написал(а):
под трасировщиком имеете ввиду SE30 или st05?

ST05 вестимо, если говорю про план выполнения ;-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Чт, ноя 05 2009, 09:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
DaV написал(а):
Hello,
есть один вопрос вокруг которого возникли споры нужно ли писать в join ксловие на mandant (client) в условиях соединения таблиц, и насколько такое условие замедлит работу?

В JOIN условие на MANDT писать не нужно. Как впрочем и в основном WHERE ;)
Но если соединение таблиц прописывается в ракурсе, а не в SELECT, тогда условие на MANDT указывать нужно.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пт, ноя 06 2009, 00:13 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
DaV написал(а):
есть один вопрос вокруг которого возникли споры нужно ли писать в join ксловие на mandant (client) в условиях соединения таблиц, и насколько такое условие замедлит работу?

Hе нужно, как впрочем и слово INNER в INNER JOIN. Если не написано LEFT JOIN, то по умолчанию идет INNER. Работу это может замедлить программистам, которые будут поддерживать код. :)

Кстати, уже в который раз хочу подчеркнуть, что alias (AS b) тоже не обязателен, можно писать просто but000~partner. Alias нужно использовать только тогда, когда делается JOIN на одну и ту же таблицу, но в разном контексте (например, чтобы в один заход вытащить данные KNA1 для Ship-to и Sold-to в SD), ну или если название таблицы сильно громоздкое. Опять же на производительность это не влияет, но не нужно сидеть и разбираться, где там у вас b, а где z.

A EXISTS - это уже subquery, по-моему они немного медленнее работают, почитайте Help.

Успехов!

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пт, ноя 06 2009, 01:09 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
Удав написал(а):
A EXISTS - это уже subquery, по-моему они немного медленнее работают, почитайте Help.


v tom to i delo cto subquery, i po idei takoe uslovie dolgno budet proveraytsya uge posle sozdaniya soedienniya tablic,sledovatelno mogno izbegat eshe odnogo joina, cto pri bolshih obemah moget okaztsya ocen vegodnym v plane bestrodeistviya i nadegnosti. ili? prosto ya duml cto vse vozmognye join lucshe perevesti v usloviya, hotya vozmogno i ne prav?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пт, ноя 06 2009, 08:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
DaV написал(а):
v tom to i delo cto subquery, i po idei takoe uslovie dolgno budet proveraytsya uge posle sozdaniya soedienniya tablic,sledovatelno mogno izbegat eshe odnogo joina, cto pri bolshih obemah moget okaztsya ocen vegodnym v plane bestrodeistviya i nadegnosti. ili? prosto ya duml cto vse vozmognye join lucshe perevesti v usloviya, hotya vozmogno i ne prav?

Не гадайте, а проверьте оба варианта с помощью ST05, как советовал Dzed Moroz :wink:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Вс, ноя 08 2009, 00:21 
Специалист
Специалист

Зарегистрирован:
Вт, июл 07 2009, 13:24
Сообщения: 235
Удав написал(а):
DaV написал(а):
v tom to i delo cto subquery, i po idei takoe uslovie dolgno budet proveraytsya uge posle sozdaniya soedienniya tablic,sledovatelno mogno izbegat eshe odnogo joina, cto pri bolshih obemah moget okaztsya ocen vegodnym v plane bestrodeistviya i nadegnosti. ili? prosto ya duml cto vse vozmognye join lucshe perevesti v usloviya, hotya vozmogno i ne prav?

Не гадайте, а проверьте оба варианта с помощью ST05, как советовал Dzed Moroz :wink:


navernoe togda lucshe se30, ctobe ocenit bestrodeistvie


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Вс, ноя 08 2009, 19:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
DaV написал(а):
navernoe togda lucshe se30, ctobe ocenit bestrodeistvie

Нет, именно ST05

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пн, ноя 09 2009, 12:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
imho, подзапросы даже в несвязанных случаях
заново выполняются для каждой строки слева:
Code:
select ...
  from tab 
  where fld in
            (select fld' from tab')
        ...


не так страшен join, как его иногда используют


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пн, ноя 09 2009, 14:32 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Из своей практики могу сказать следующее, что во многом эффективность соединение зависит от того, какая база лежит в основе... Например, Oracle достаточно быстро выполняет вложенный корреляционный EXISTS, а в ряде случаев (это уже зависит от структуры запроса и настроек самого Oracle) может выполнять и переписывание запроса в более эффективный вид. Если взять DB2, то запрос такого вида может выполняться гораздо дольше. План выполнения запроса безусловно полезная вещь, но бывают ситуации, когда быстрее выполнить Select из одной таблицы с некоторым условием и Select из другой таблицы с некоторым условием, а соединение результатов написать в ABAP-е. План выполнения запроса в данном случае пользы не приносит... Здесь важна практика и опыт, а также степень загруженности базы.

2 Jelena Что касаемо стиля написания, то разумно везде, где обязательна ссылка на таблицу указывать ее псевдоним. Только псевдоним должен быть осмысленным. Вот и все :D


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пн, ноя 09 2009, 14:34 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
2 trop

Бред


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пн, ноя 09 2009, 17:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
murmur написал:
План выполнения запроса безусловно полезная вещь, но бывают ситуации, когда быстрее выполнить Select из одной таблицы с некоторым условием и Select из другой таблицы с некоторым условием, а соединение результатов написать в ABAP-е. План выполнения запроса в данном случае пользы не приносит...

1.В данном случае это первый шаг, который необходимо сделать.
2.Про тонкости работы с конкретной СУБД и базой данных лучше узнать у базисников. ;)

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Join
СообщениеДобавлено: Пн, ноя 09 2009, 18:41 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
А что хранится в поле ZCLIENTCAT? Для чего оно используется?


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB