Текущее время: Сб, июл 19 2025, 17:38

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Пт, ноя 01 2013, 16:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
troy написал(а):
Parazit написал:
В данном случае ключевая проблема - FOR ALL ENTRIES. Любой JOIN будет лучше этого.

Да ну. Во-первых, FOR ALL ENTRIES зачастую лучше JOINов, если таблиц >2. Во-вторых, в некоторых случаях это единственный возможный вариант.

Ни разу не встречал FOR ALL ENTRIES лучше JOINов. Более того, во всех конкретных спорных случаях я выигрывал. Разумеется, за счет грамотного построения запроса и индексов.
Про единственный возможный вариант я уже упомянул. Это уже камни в сапу кидать надо.

troy написал(а):
Parazit написал:
По поводу "прелестей" - "Сложно программисту - легко пользователю!". Мораль - программист не должен облегчать себе работу в ущерб качеству программы.

В целом согласен, но применительно к конкретному вопросу - не в тему. На работу пользователя способ реализации никак в моем случае не повлияет. Что касается облегчения работы - динамический селект как раз был сделан с целью улучшить качество кода (хотя качество - понятие относительное, конечно). А в части реализации он ну никак не проще отдельных выборок и подпрограмм.

В конкретном случае пользователь сильно теряет в производительности программы из-за FOR ALL ENTRIES.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Сб, ноя 02 2013, 13:26 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Parazit написал:
И это правильно! Программы пишут не для того, чтобы программисту было легче, а для того, чтобы пользователю было легче.
Вот-вот, а поддержке с таким отношением приходится потом разгребать проблему раза в три дольше. И что характерно - пользователю от этого не легче, у него отчет работает неправильно и ему глубоко фиолетово насколько там красиво написано. Проблема в том, что ваша крайность 'только sql!' на практике ничуть не лучше противоположной крайности 'сначала выгребем все данные, потом разберемся' - в поддержке геморройно и то и другое, хоть и по разным причинам. Истина как всегда - сами знаете где :)

P.S. Слыхал о таком крайнем случае мегаSQLщика - в его программе шел первым делом оператор EXEC, где он на чистейшем Oracle SQL фигачил всю требуемую логику программы - выборку, обработку данных и etc. Собственно абапом пользовался только в случаях крайней необходимости - вывести данные, нарисовать отчетик.

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Пн, ноя 04 2013, 19:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
ArmAnn написал:
Parazit написал:
И это правильно! Программы пишут не для того, чтобы программисту было легче, а для того, чтобы пользователю было легче.
Вот-вот, а поддержке с таким отношением приходится потом разгребать проблему раза в три дольше. И что характерно - пользователю от этого не легче, у него отчет работает неправильно и ему глубоко фиолетово насколько там красиво написано. Проблема в том, что ваша крайность 'только sql!' на практике ничуть не лучше противоположной крайности 'сначала выгребем все данные, потом разберемся' - в поддержке геморройно и то и другое, хоть и по разным причинам. Истина как всегда - сами знаете где :)

P.S. Слыхал о таком крайнем случае мегаSQLщика - в его программе шел первым делом оператор EXEC, где он на чистейшем Oracle SQL фигачил всю требуемую логику программы - выборку, обработку данных и etc. Собственно абапом пользовался только в случаях крайней необходимости - вывести данные, нарисовать отчетик.

Я сталкиваюсь все время как раз с обратным, приходится разгребать кучу abap-кода с внутренними таблицами. Он же (код) обычно и является источником ошибок. И времени на разгребание уходит раз в 10 больше, чем если бы это был SQL. В крайних степенях я говорю лишь потому, что наблюдаю вокруг SQL-безграмотность в крайней степени.
В защиту EXEC я ничего не говорил, однако, вероятно, большинству абаперов есть чему поучиться у это мегаSQL-щика.
p.s.
Вообще странно обсуждать необходимость изучения языка баз данных при том, что работать с ними приходится каждый день.
Одно могу сказать точно, т.к. испытал это на себе. После решения нескольких "сложных" задач на чистом SQL мозги несколько выпрямляются, а мышление становится гибче - вот такой вот парадокс!
p.p.s.
"Сложных" написал в кавычках потому, что поначалу они казались вообще неразрешимыми. А когда мозги выпрямились, оказались банальными. :)

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Вт, ноя 05 2013, 00:22 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 22 2010, 19:53
Сообщения: 34
Parazit написал:
Одно могу сказать точно, т.к. испытал это на себе. После решения нескольких "сложных" задач на чистом SQL мозги несколько выпрямляются, а мышление становится гибче - вот такой вот парадокс!
p.p.s.
"Сложных" написал в кавычках потому, что поначалу они казались вообще неразрешимыми. А когда мозги выпрямились, оказались банальными. :)

А вы пример приведите думаю не мне одному будет интересно.
Плюс если напоговорить, то представляю ваш ужас когда вы столкнетесь c ORM например BOPF( EHS, TM ) где вообще слой БД укрыт от разработчика.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Вт, ноя 05 2013, 02:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Человек написал(а):
Parazit написал:
Одно могу сказать точно, т.к. испытал это на себе. После решения нескольких "сложных" задач на чистом SQL мозги несколько выпрямляются, а мышление становится гибче - вот такой вот парадокс!
p.p.s.
"Сложных" написал в кавычках потому, что поначалу они казались вообще неразрешимыми. А когда мозги выпрямились, оказались банальными. :)

А вы пример приведите думаю не мне одному будет интересно.
Плюс если напоговорить, то представляю ваш ужас когда вы столкнетесь c ORM например BOPF( EHS, TM ) где вообще слой БД укрыт от разработчика.

Вы не поверите, но я как раз приветствую подход, когда слой БД укрыт от разработчика. Пусть лучше грамотный программист типизирует задачи доступа к данным и разработает хорошие прикладные инструменты для этого. Чем каждый будет там "палками мешать, да ведром черпать". Хороший и понятный пример - 1С Бухгалтерия.
Примеры задач SQL, честно говоря уже не помню, т.к. было в конце 90-х (с тех пор только сап). Общей задачей тогда было построить БД бух. учета и сформировать все отчеты на SQL (аналоги стандартных отчетов 1С). Особенно запомнилась задача построения отчета с нарастающим итогом, причем одним запросом. Мышление, воспитанное на Foxpro, поначалу отказывалось ее решать, почему-то жутко не хватало понятия "номер записи", что в SQL отсутствует как чуждый элемент. Так что рекомендую эту маленькую головоломку.

p.s.
Я отнюдь не считаю себя профи в SQL и свои познания оцениваю чуть выше начального уровня. Тем более мне странно наблюдать такое единодушное неприятие SQL вместо того, чтобы хотя бы освоить элементарные вещи - самим же будет проще.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Вт, ноя 05 2013, 10:22 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
На мой взгляд, "неприятие" SQL у программистов объяснимо не только ленью:
1. Долгое время БД так позиционировались на рынке, что использовать их всерьез не возникало вообще никакого желания: оракл и прочий ынтерпрайз стоит немеряно денег, всякие mysql'и весьма бедны по функционалу. Этой сейчас только постгрес достаточно развился.
2. "А скрипач точно нужен?" Может язык общего назначения справился бы с назначением SQL? Особенно в части хранимок.
3. СУБД даже не пытаются ответить на вопрос: "Что если сервер БД (железка) перестанет справляться с потоком запросов на запись?".

Вообще получается 2 варианта: либо использовать примитивный SQL, с которым справится большинство СУБД, либо продаться в рабство ораклу и надеяться на всю катушку использовать его функциональность. Естественно многие выбирают первый вариант.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Вт, ноя 05 2013, 10:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Я солидарен с Armann: всему свое время и место.
1) никакого непринятия к SQL нет. В текущей реализации архитектуры SAP упор делается на OpenSQL. Его синтаксис и возможности гораздо беднее нативных SQL. Но так и архитектура другая. Для текущей архитектуры - самое оно.
2) большие SQL запросы с большим количеством JOIN? да ради бога, пока все работает как надо и решение прозрачно (оба условия должны выполняться, оба)
3) native SQL - только тогда когда нужно. Его использование сразу же вырубает часть плюшек архитектуры (различные буферизации и прочее-прочее-прочее)

еще раз: каждому инструменту свое время и место. Нельзя с помощью одного запроса OpenSQL получить, к примеру, связку док.FI-док.движения MM, при необходимости идти от документа FI (т.к. связь в BKPF-AWKEY в виде НомерГод движ.материала). Можно сделать через native(Exec\endExec), но не нужно, т.к. не для того его делали. Зато только с native можно сделать выборку из др. субд, через линк.

PS: ждите переход на хану, в койей и будет раздолье sql на стороне сервера и работа с хранимками там же :-)

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Вт, ноя 05 2013, 13:22 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Именно, всему время и место.
Принципиально не использовать джоины так же странно, как и принципиально не использовать выборку в промежуточные таблицы - инструмент нужно использовать исходя из ситуации и условий. И SQL - тоже инструмент, который надо знать абаперу, однако не нужно пытаться заткнуть им все дырки. Тем более что у САПа нет инструментов для нормальной работы с SQL - ну вот разве сможете вы 'покрутить' сложный селект в продуктиве, понять чего не хватает и что нужно поправить? Фигвам, SE16 в руки и вперед, разгребать

Parazit написал:
однако, вероятно, большинству абаперов есть чему поучиться у это мегаSQL-щика.
В плане SQL - может быть, хотя не факт. Однако этот пример приведен для демонстрации подхода: 'я на любом языке могу писать как на фортране'

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Вт, ноя 05 2013, 16:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
в hana вроде можно тяжелые таблицы в озу распред. сурбд "поднимать" (in-memory db),
совсем новый abap..


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Ср, ноя 06 2013, 11:17 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Коллеги, сам был удивлен. Прошло мимо меня. Но имейте ввиду что ваше обсуждение FOR ALL ENTRIES некорректно. Прошу ознакомиться (там и на ноту ссылка есть).

Начиная с 7.0 сильно неоднозначно. Parazit неправ. Автору вопроса тоже очень советую прочитать что пишут на MSDN'е.

Суть вкратце: "Over the years we retired this way of executing FAE statements to a more efficient type of query. The type of query which in OSS note #652634 is named as ‘UNION ALL’ method. A slight change only, but..."


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Ср, ноя 06 2013, 11:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
FOR ALL ENTRIES обычно по плану склеивает через OR, работает достаточно быстро и в 4.7


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Ср, ноя 06 2013, 12:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
2 Пономарев Артем: кмк хрен редьки не слаще. Как я помню, основная трабла была в том, что табла из FOR ALL ENTRIES по дефолту бьется на части, для каждой из частей фактически выполняется отдельный запрос. Что на уровне субд (я буду говорить за оракл, т.к. с ним знаком) выливается : 1) возможно - в парсинг запроса, 2) открытие неявного курсора оракла 3) фетчинг данных 4) закрытие курсора 5) вытаскивание данных на апп.сервер
Мне что-то помнится, что UNION ALL вроде как все равно для каждой части пункты с 1 по 4 будет выполнять. Просто первоначальное объединение результатов будет происходить в субд.
Не?

ЗЫ: опять же.. очень доставляло наличие спец. нот для FOR ALL ENTRIES у DB2

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Чт, ноя 07 2013, 10:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Пономарев Артем написал:
Но имейте ввиду что ваше обсуждение FOR ALL ENTRIES некорректно. Прошу ознакомиться (там и на ноту ссылка есть

Так нота только для MS SQL. :wink:
Насколько я увидел, для Oracle FOR ALL ENTRIES что в 4.7 (620), что в 6.05 (702) работает одинаково.

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Чт, ноя 07 2013, 10:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Кодер написал(а):
1) возможно - в парсинг запроса, 2) открытие неявного курсора оракла 3) фетчинг данных 4) закрытие курсора

В терминах ST05:
1. PREPARE (если не используется HINT SUBSTITUTE_VALUES, то выполняется 1 раз)
2. OPEN/REOPEN
3. FETCH

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация последовательности таблиц в JOIN
СообщениеДобавлено: Чт, ноя 07 2013, 12:13 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Удав, это был ответ на позицию Parazit'а, которую я до этой ноты разделял на 100% (FAE не может быть быстрее JOIN'а). В данный момент это уже не так :)

Кодер, слаще. Тот оверхэд, который вы описали, не совсем верен для UNION. Хотя дело не в нем. Дело в том, что UNION ALL, в ряде случаев, сильно быстрее OR. Пример: как условие, OR может быть отброшено оптимизатором, что приведет к RANGE SKAN'у на пустом месте (увеличение IO операций). На больших объемах будет крайне заметно.

З.Ы.: Однако статья в блоге доставляет.
Начало
Цитата:
Over the years we retired this way of executing FAE statements to a more efficient type of query. The type of query which in OSS note #652634 is named as ‘UNION ALL’ method

Окончание
Цитата:
Observing some slow FAE queries here and there and realizing that the query plan is less optimal, can be resolved by query specific hints either returning to the old behavior on a query basis


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

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


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

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


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

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