Текущее время: Ср, июл 30 2025, 21:48

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Вт, дек 30 2008, 14:24 
Почетный гуру
Почетный гуру
Аватара пользователя

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


Надеюсь, проверялось на большом объеме данных. Хорошо бы, если нет разницы, а то недавно пришлось переделать запросы на CORRESPONDING, опасался заметной потери производительности.

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


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

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Если посмотреть хелп на 4.0 то там сказано следующее:
Цитата:
INTO clause
.....
Performance:

3. You should only use the variant ... INTO CORRESPONDING
FIELDS ... with large volumes of data because otherwise the
time required to compare the field names in the name table
is too high.


Если я еще правильно понимаю английский, то: наоборот, используйте эту конструкцию, т.к. иначе будет много времени тратится на определение, куда же складывать.
Скорее всего, коллега Monarch попутал вариант, когда не перечисляются поля вообще (select * вместо select field1 .. fielddN ). Как раз этот вариант рассмотрен в SE30 - примеры производительности. И как раз там видно (что в версии 4.0, что в ERP2005), что использование CORRESPONDING FIELDS не оказывает существенного влияния на производительность.


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Да нет. Там написано, что использовать конструкцию INTO CORRESPONDING
FIELDS целесообразно только с большими объемами данных.
Иначе время на compare the field names in the name table будет заметно по отношению ко времени самой экстракции данных.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Вт, дек 30 2008, 15:39 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Но на небольших объемах данных это время в абсолютном значении весьма мало для того, чтобы дать заментый эффект производительности.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Вт, дек 30 2008, 19:48 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Из моего личного опыта в ECC 6.0 + SQL Server - разница между INTO и INTO CORRESPONDING FIELDS в простом запросе (как тут был приведен пример) ничтожно мала. Полагаю, что "страшилки" либо устарели, либо тут бОльшее значение имеют какие-то другие факторы - например, количество задействованных полей, а также есть ли JOIN.

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


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
к примеру, в таких случаях я делаю так: определяется структура для выборки
с типизацией полей вида type table-field, затем в runtime по структуре
однократно формируется строка имён полей с алиасами (пишется и отлаживается за 10 мин)
и тогда не надо писать into corresponding, к тому же менять структуру, не меняя запрос - удобно
(подозреваю что удобство, а не производительность, и была причиной):
load-of-program / class_constructor:
w = class=>sql_fields( any = data_l alias = 'bsis~s,bkpf~k' ).
..
select (w) from bsis as s inner join bkpf as k on .. into table data_t where ...

на стороне as-db при использовании into corresponding fields, вероятно,
выборка производится вначале во внутренний буфер,
затем по строкам производится mapping, этот map-loop будет как-то заметен
при 30-50 тыс зап, к примеру, по 512 байт, или чтоб не гадать можно просто замерить


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Оптимизация запроса
СообщениеДобавлено: Пт, янв 02 2009, 19:23 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
trop написал(а):
однократно формируется строка имён полей с алиасами (пишется и отлаживается за 10 мин)
и тогда не надо писать into corresponding

Мне INTO CORRESPONDING в основном приходится использовать потому, что в таблице посредине всунуты поля, которые не имеют отношения к выборке (например, какие-нибудь индикаторы). Изменить порядок полей в таблице не всегда возможно и целесообразно (в основном речь идет о поддержке старых программ). По-моему, в этом случае такой вариант особо не спасет... :?

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


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
да, но можно в конец доп поля добавлять


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

Зарегистрирован:
Вт, мар 13 2007, 22:57
Сообщения: 71
Удав написал(а):
Monarch написал(а):
Но согласитесь, что INTO CORRESPONDING FIELDS OF TABLE лучше избегать по возможности.

Ну как сказать...
Посмотрите план запроса
Code:
data: begin of gs_bkpf,
        bukrs type bkpf-bukrs,
        belnr type bkpf-belnr,
        gjahr type bkpf-gjahr,
        awkey type bkpf-awkey,
        awtyp type bkpf-awtyp,
      end of gs_bkpf,
      gt_bkpf like standard table of gs_bkpf.

parameters: p_bukrs type bkpf-bukrs,
                   p_gjahr type bkpf-gjahr.
select-options: so_belnr for gs_bkpf-belnr.

field-symbols: <fs_bkpf> like gs_bkpf.
start-of-selection.
  select *
  into correcponding fields of table gt_bkpf
  from bkpf
  where bukrs = p_bukrs
    and belnr in so_belnr
    and gjahr = p_gjahr.

  loop at gt_bkpf assigning <fs_bkpf>.
    ...
  endloop.

В этом примере можно использовать "select *", так как интерфейс с БД корректно формирует запрос и указывает в обращении к БД конкретные имена полей из gs_bkpf вместо "*". :wink:


а в каком случае тогда нельзя? точнее, чем этот случай лучше остальных. мне казалось "select *" замедляет работу программы


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

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
birds написал(а):
а в каком случае тогда нельзя? точнее, чем этот случай лучше остальных. мне казалось "select *" замедляет работу программы

Замедляет в том случае когда Вам надо например всего 5 полей, а вы объявляете gt_bkpf Like bkpf occurs 0 with header line и используете при выборке select *.


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

Зарегистрирован:
Вт, ноя 07 2006, 09:49
Сообщения: 303
Запрос производится из двух таблиц посредством JOIN. Связь между ними однозначно определяется по полю OBJNR. В обоих таблицах есть поля KOKRS, BUKRS. Будет ли выигрыш в скорости от указания значений KOKRS и BUKRS для каждой из таблиц в условии WHERE?

а)
Code:
SELECT *
  APPENDING CORRESPONDING FIELDS OF TABLE itab
  FROM a
  JOIN b
    ON a~objnr = b~objnr
  WHERE
    a~kokrs = p_kokrs AND
    a~bukrs = p_bukrs.


б)
Code:
SELECT *
  APPENDING CORRESPONDING FIELDS OF TABLE itab
  FROM a
  JOIN b
    ON a~objnr = b~objnr
  WHERE
    a~kokrs = p_kokrs AND
    a~bukrs = p_bukrs AND
    b~kokrs = p_kokrs AND
    b~bukrs = p_bukrs AND.

_________________
* * *


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Телепаты улетели на юг :)
Что за таблицы, сколько записей, какие индексы ну и т.п. Посмотрите в ST05 и делов то.


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
aar написал(а):
Запрос производится из двух таблиц посредством JOIN. Связь между ними однозначно определяется по полю OBJNR. В обоих таблицах есть поля KOKRS, BUKRS. Будет ли выигрыш в скорости от указания значений KOKRS и BUKRS для каждой из таблиц в условии WHERE?

1.Нет, если в таблице и есть индекс по полю objnr.
2.Если в таблице b меньше записей, чем в a, то запрос ускорится, если есть индекс по objnr в таблице a

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


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

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


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

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


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

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