Drop the FOR ALL ENTRIES part
Скорее всего, остальная часть условия WHERE достаточно избирательна. Вы получаете больше записей, чем необходимо, но намного быстрее.
Поскольку git_kunnr_tab
уникален, вы можете превратить его в HASHED-таблицу и отфильтровать git_oi_tab
с ней на сервере приложений.
SELECT kunnr umsks umskz gjahr belnr buzei bschl shkzg dmbtr bldat
zfbdt zbd1t zbd2t zbd3t rebzg rebzj rebzz rebzt
INTO corresponding fields of table git_oi_tab
FROM bsid
WHERE bukrs = p_bukrs
AND umsks = ' '
AND augdt = clear_augdt
AND budat le p_key
AND blart in s_blart
AND xref3 in s_xref3.
DATA: lt_kunnr_tab TYPE HASHED TABLE of <type of git_kunnr_tab>
WITH UNIQE KEY kunnr.
lt_kunnr_tab = git_kunnr_tab.
LOOP AT git_oi_tab ASSIGNING FIELD-SYMBOL(<fs_oi>).
READ TABLE lt_kunnr_tab TRANSPORTING NO FIELDS
WITH KEY kunnr = <fs_oi>-kunnr.
IF sy-subrc <> 0
DELETE git_oi_tab.
ENDIF.
ENDIF.
ENDLOOP.
FREE lt_kunnr_tab.
This is not a general solution
Если таблица драйверов FAE содержит более 20% строк целевой таблицы, полное удаление ее в основном полезно для скорости.
Если в ней меньше строк, лучшим решением будет FAE.
Однако будьте осторожны, удаление FAE может значительно увеличить потребление памяти итоговой внутренней таблицей!
FOR ALL ENTRIES vs Range table
Вы можете увидеть много мест в Интернете, где таблицы диапазонов работают быстрее, чем FAE. Это верно в некоторых очень конкретных случаях:
- Используется только одно поле из таблицы драйверов FAE 1
- В таблице драйверов больше строк, чем FAE отправляет за один пакет.
- По умолчанию размер пакета составляет 5 в Oracle, 50 в DB2, 100 в HANA.
- В таблице Range не так много строк, чтобы вызывать дамп
- Максимальная длина составляет 1048 576 байт (примечание 1002491).
Таблицы диапазонов могут быть быстрее, чем FAE, потому что они отправляют все условия фильтрации в одном запросе. Это, конечно, опасно, поскольку размер запроса ограничен. Если он превышает установленный лимит, вы получите дамп.
Однако, используя подсказку MAX_IN_BLOCKING_FACTOR
и MAX_BLOCKING_FACTOR
, вы можете дать FAE все преимущества таблиц диапазонов без их недостатков за счет увеличения размера пакета.
Поэтому используйте таблицы диапазонов только с фактическими диапазонами, например between A and C
или not between G and J
.
- это не о скорости, а о функциональной корректности. Таблицы диапазонов обрабатывают поля независимо, в то время как FAE работает со строками
person
András
schedule
22.04.2019
execution plan
(ST05), который сообщает, что делает база данных для оптимизации чтения. Это индивидуально для каждой системы. Обратите внимание, чтоFOR ALL ENTRIES
является конструкция ABAP, которая разделяет SELECT на множество SELECT, разделяяGIT_KUNNR_TAB
на группы по 5 строк (значение 5 можно изменить в параметрах профиляrsdb/max_[in_]blocking_factor
или подсказкеmax_[in_]blocking_factor
) - person Sandra Rossi   schedule 22.04.2019