Текущее время: Пн, июл 28 2025, 15:18

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, июн 04 2010, 06:31 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Если я не ошибаюсь, то сап как раз рекомендует джойнить текстовые таблицы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, июн 04 2010, 08:35 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Parazit написал:
SYS написал(а):
Интересно, любители "10-ти этажных SQL запросов" текстовые значения из справочников тоже цепляют в один запрос, или же используют внутренние таблицы как буфер?

А чем "текстовые значения из справочников" отличаются от прочих?

Насколько я понимаю, речь идет о буферизированных таблицах.

Besa написал:
Если я не ошибаюсь, то сап как раз рекомендует джойнить текстовые таблицы.

Ошибаетесь, см выше :wink:

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, июн 04 2010, 09:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Удав написал(а):
Насколько я понимаю, речь идет о буферизированных таблицах.

Я тоже понимаю, что речь идет об использовании внутренних таблиц для буферизации. Конечно же сам пользуюсь этими приёмами! Но это никак не противоречит моим утверждениям, т.к. это приходится делать для лечения саповских же "геморроев". И рекомендации САПы имеют те же корни.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, июн 04 2010, 10:04 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Parazit написал:
Удав написал(а):
Насколько я понимаю, речь идет о буферизированных таблицах.

Я тоже понимаю, что речь идет об использовании внутренних таблиц для буферизации. Конечно же сам пользуюсь этими приёмами! Но это никак не противоречит моим утверждениям, т.к. это приходится делать для лечения саповских же "геморроев". И рекомендации САПы имеют те же корни.

Не-не-не, немного путаете. Сапа умеет буферизовать указанные таблицы на стороне сервера приложений (см. технические свойства таблицы) - обычно это справочники, например T001. В случае простой выборки из такой таблицы данные во возможности возьмутся из буфера в сервере приложений и запрос до БД не дойдет, что собственно и ускоряет дело. А в случае запроса с джоинами придется лезть в БД, тут уж куда деваться - и вся эта буферизация оказывается побоку

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, июн 04 2010, 10:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
ArmAnn написал:
Не-не-не, немного путаете. Сапа умеет буферизовать указанные таблицы на стороне сервера приложений (см. технические свойства таблицы) - обычно это справочники, например T001. В случае простой выборки из такой таблицы данные во возможности возьмутся из буфера в сервере приложений и запрос до БД не дойдет, что собственно и ускоряет дело. А в случае запроса с джоинами придется лезть в БД, тут уж куда деваться - и вся эта буферизация оказывается побоку

Я понимаю для чего существуют буферизованные таблицы. Но мы же кажется говорим об оптимизации запросов при помощи внутренних таблиц вообще и "FOR ALL ENTRIES" в частности ?!
В общем, этот вопрос нужно рассматривать на конкретных задачах. Иначе дискуссия бессмысленна. За сим её и прекращаю! :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, июн 04 2010, 10:54 
Гуру-модератор
Гуру-модератор
Аватара пользователя

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

золотые слова ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 08:48 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 18 2008, 11:25
Сообщения: 100
Часто бывает делема между
FOR ALL ENTRIES
LOOP
READ TABLE
ENDLOOP
и
LOOP
SELECT SINGLE
ENDLOOP.

Понятно, что такие конструкции надо в принципе избегать, но если деваться некуда? То что будет эффективнее?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 08:54 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Refresh написал(а):
Часто бывает делема между
FOR ALL ENTRIES
LOOP
READ TABLE
ENDLOOP
и
LOOP
SELECT SINGLE
ENDLOOP.

Понятно, что такие конструкции надо в принципе избегать, но если деваться некуда? То что будет эффективнее?
"ABAP-код: инспектор" (тр. SCI или SE38-Программа-Проверить-Код инспектор) за первый вариант.

_________________
"I have a dream"(c)Martin Luther King, Jr.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 09:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Refresh написал(а):
Понятно, что такие конструкции надо в принципе избегать, но если деваться некуда? То что будет эффективнее?

Предпочтительнее FOR ALL ENTRIES, т.к. SAP еще оптимизирует его. Один Select разбивает на несколько реальных запросов к БД, но за один такой запрос может обработаться несколько записей из внутренней таблицы. Т.о. сокращается общее число, длина и время на интерпретацию запросов к базе данных в сравнении с Select в цикле.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 09:32 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 18 2008, 11:25
Сообщения: 100
Я почему-то думал, что FOR ALL ENTRIES сервер приложений представялет как LOOP SELECT SINGLE ENDLOOP, ну или примерно так. :oops: Рад, что ошибался. К сожалению не понимаю, как читать результат трассировки((


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 12:34 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Цитата:
Я почему-то думал, что FOR ALL ENTRIES сервер приложений представялет как LOOP SELECT SINGLE ENDLOOP, ну или примерно так. Рад, что ошибался. К сожалению не понимаю, как читать результат трассировки((


Посмотрите в плане запроса:
- for all entries: в Explain увидите, что в условии выбора несколько значений через IN на одну операцию
- select single in loop: по одному условию на каждую операцию

Сделал пример (надуманный, конечно, но для наглядности подходит) : сначала данные из LIKP выбираются, потом из LIPS по FOR ALL ENTRIES IN LIKP. Затем цикл по LIKP и select single из lips

Одна из операций REOPEN для for all entries
Code:
SELECT                                                       
  "VBELN" , "POSNR"                                           
FROM                                                         
  "LIPS"                                                     
WHERE                                                         
  "MANDT" = :A0 AND "VBELN" IN ( :A1 , :A2 , :A3 , :A4 , :A5 )


Для выбора в цикле:
Code:
SELECT                                             
/*+                                               
  FIRST_ROWS (1)                                   
*/                                                 
  "VBELN" , "POSNR"                               
FROM                                               
  "LIPS"                                           
WHERE                                             
  "MANDT" = :A0 AND "VBELN" = :A1 AND ROWNUM <= :A2


Вот примерно разница...

Но последовательность операций примерно одинаковая будет в обоих случаях:
Code:
OPEN->FETCH->REOPEN->FETCH->REOPEN->FETCH->.......

Только для "for all entries" их меньше будет, поэтому можно и так сказать:
Цитата:
Предпочтительнее FOR ALL ENTRIES, т.к. SAP еще оптимизирует его. Один Select разбивает на несколько реальных запросов к БД, но за один такой запрос может обработаться несколько записей из внутренней таблицы. Т.о. сокращается общее число, длина и время на интерпретацию запросов к базе данных в сравнении с Select в цикле.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 12:58 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
Parazit написал:
Разумеется не быть, САПа не даст. Данное утверждение касается только обращения с СУБД. Я исхожу из того, что SQL - очень мощный самодостаточный язык.


SQL, но не его Open-реализация :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Вт, авг 31 2010, 13:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Sergeant написал(а):
SQL, но не его Open-реализация :)

Насколько я понимаю, то реализация SQL для обращения к кластерным таблицам недотягивает даже до Open SQL. Это я про JOIN. :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, сен 03 2010, 10:21 
Ассистент
Ассистент

Зарегистрирован:
Ср, июл 14 2010, 10:33
Сообщения: 41
Откуда: Москва
Пол: Женский
Refresh написал(а):
Я почему-то думал, что FOR ALL ENTRIES сервер приложений представялет как LOOP SELECT SINGLE ENDLOOP, ну или примерно так. :oops: Рад, что ошибался. К сожалению не понимаю, как читать результат трассировки((


смотрите ноту 881083, там есть пояснения к FOR ALL ENTRIES - количеству обрабатываемых записей
в BC490 ABAP Perfomance Tuning есть про трассировку и многое другое

Мнение внутренние таблицы и FOR ALL ENTRIES абсолютное зло не разделяю. Во всем хороша умеренность. Да и от задачи зависит.

Большой опыт оптимизации чужих программ показывает война JOIN c FOR ALL ENTRIES не главное.

1. Передается пустая внутренняя таблица в FOR ALL ENTRIES. Самая популярная ошибка.
2. Выборка идет не по индексам или не по тем индексам. В системе разработке все хорошо. В продуктиве плохо.
3. select single в loop
3. Программист ленив и выбирает select *
4. Используется loop, а там можно read. Или некорректный read
5. Считываются данные, которые потом нигде не используются
...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES по сортированной таблице
СообщениеДобавлено: Пт, сен 03 2010, 18:02 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
FOR ALL ENTRIES не зло при правильном использовании, особенно если почитать вышеназванные ноты.
При интерпретации он превращается либо в UNION либо в IN() либо в OR(.. and...) OR(.. and...)
Причем количество параметров в IN, число "OR" и UNION настраивается(но не рекомендуется менять настройку = 5 из-за потенциально возможного неравномерного расхода памяти на СУБД). Можно также метять эти параметры для конкретного запроса.
%_HINTS ORACLE '&max_in_blocking_factor 100&'
%_HINTS ORACLE '&max_blocking_factor 20&'



У меня сложился следующий список типовых ошибок:
I. Выбор данных из БД

1. Наличие дублирующих выборок данных.

2. Наличие неключевых выборок, выборок без использования индексов, выборок создающих большую нагрузку на БД.

3. Использование выборок в циклах.

4. Использование FOR ALL ENTRIES без проверки на пустоту внутренней таблицы.

5. Использование FOR ALL ENTRIES для большого числа одинаковых записей(без предварительного определения уникальных записей).

6. Конструкции SELECT … ENDSELECT, если это не обосновано.

7. Выбор всех полей без ограничения (SELECT *) (кроме небольших таблиц из 4-5 полей).

II. Обработка внутренних таблиц

1. Вложенные циклы, если есть возможность заменить один из них на READ.

2. LOOP … WHERE … для несортированных таблиц.

3. COLLECT для обычных (не сортированных или хеш-таблиц).

4. Некорректное использование конструкций LOOP … AT NEW, AT END OF.

5. Использование SORT+DELETE ADJACENT DUPLICATES вместо цикла со вставкой в хеш-таблицу.

6. Подсчет промежуточных сумм с использованием вложенных циклов, вместо использования промежуточных хеш-таблиц.

7. Использование READ без TABLE KEY или BINARY SEARCH, если есть такая возможность.

8. Проверка на пустоту HEDERELINE вместо тела таблицы.

9. Использование HEADERLINE.

10. Чрезмерное использование MODIFY, MODIFY …INDEX вместо использования FIELD-SYMBOLS.

11. Необоснованное использование глобальных данных (т.к. в отличие от локальных переменных они остаются в памяти все время выполнения программы).


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

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


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

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


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

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