Текущее время: Ср, апр 24 2024, 18:10

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 16:28 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Добрый день.
Допустим, есть loop at itab where ...
Как понять, использовал loop сортированный ключ таблицы itab для ускорения доступа или нет?

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 16:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Если таблица удовлетворяет требованиям и where использует все ключевые поля то 100%

А так сравнительным тестом на объеме

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 16:59 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Там довольно сложное условие. Сначала идут поля ключа, потом всякие хитрые условия.
Сравнительный тест делать последнее дело, я надеялся, что это где-то в отладчике или SAT можно посмотреть.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 17:01 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
По-моему LOOP AT всегда использует первичный ключ: сапгуй любит выдавать предупреждения, что используется первичный ключ, хотя (почти) все поля непервичного ключа обеспечены.
Возможно, сап не может определить, какой будет быстрее и поэтому оставляет первичный, требуя явного указания ключа.
Возможно, зависит от версии.
Изображение


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 17:13 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Нашел в help такой вариант: объявить ключ как вторичный и явно требовать его использования в loop
Code:
DATA itab LIKE STANDARD TABLE OF line
               WITH UNIQUE HASHED KEY key COMPONENTS b e d.



LOOP AT itab INTO line USING KEY key
     WHERE b = '...' AND d = '...' AND e IS INITIAL.
ENDLOOP.


Тогда там где система не может использовать ключ, будет ошибка на этапе компиляции
Цитата:
WHERE condition cannot be optimized with the specified secondary key "KEY" ..

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 17:52 
Начинающий
Начинающий

Зарегистрирован:
Вт, мар 21 2017, 17:34
Сообщения: 4
Все верно, если таблица объявлена только как type table of, то loop будет по всем записям проверять условия.
Если объявить с вторичным ключом (сортед) и использовать using key цикл будет только по записям соответствующим ключу (поиск записи аналогичен binary search при read table).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как понять, использовал loop сортированный ключ таблицы или нет?
СообщениеДобавлено: Ср, май 31 2017, 17:57 
Начинающий
Начинающий

Зарегистрирован:
Вт, мар 21 2017, 17:34
Сообщения: 4
Но этот способ иногда работает дольше (особенно если много insert/append), чем отсортировать таблицу и запускать loop с индекса

Code:
SORT itab BY field1.
READ TABLE itab WITH KEY field1 = <...> BINARY SEARCH.
IF sy-sybrc = 0.
  LOOP AT itab ASSIGNING <ls_tab> FROM sy-tabix.
    IF <ls_tab>-field1 NE <...>.
      EXIT.
    ENDIF.

  ENDLOOP.
ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

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


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

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


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

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