Текущее время: Вт, июл 15 2025, 09:11

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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