Текущее время: Пт, мар 29 2024, 08:43

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


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

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


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

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