Я читаю данные из SAP Core Data Service (представление CDS, SAP R / 3, ABAP 7.50), используя предложение WHERE
в своем основном (и единственном) ключевом столбце.При использовании FOR ALL ENTRIES
(примерно в 5 раз) происходит значительное снижение производительности:
Чтение данных с использованием обычного предложения WHERE
в моем случае занимает около 10 секунд:
SELECT DISTINCT *
FROM ZMY_CDS_VIEW
WHERE prim_key_col eq 'mykey'
INTO TABLE @DATA(lt_table1).
Чтение данных с использованием FOR ALL ENTRIES
с тем же WHERE
занимает в моем случае около 50 секунд:
"" boilerplate code that creates a table with one entry holding the same key value as above
TYPES: BEGIN OF t_kv,
key_value like ZMY_CDS_VIEW-prim_key_col,
END OF t_kv.
DATA lt_key_values TYPE TABLE OF t_kv.
DATA ls_key_value TYPE t_kv.
ls_key_value-key_value = 'mykey'.
APPEND ls_key_value TO lt_key_values.
SELECT *
FROM ZMY_CDS_VIEW
FOR ALL ENTRIES IN @lt_key_values
WHERE prim_key_col eq @lt_key_values-key_value
INTO TABLE @DATA(lt_table2).
Я не понимаю, почему при использовании * 1015 такой же выбор занимает в пять раз больше времени,Поскольку в таблице lt_key_values
есть только 1 запись, я ожидаю, что база данных (sy-dbsys
- это 'DB6' в моем случае) будет выполнять точно такие же операции плюс, возможно, небольшие незначительные накладные расходы - 40 с.
Выбориз базового представления SQL вместо CDS (с его контролем доступа и т. д.) вообще не имеет значения, равно как и добавление или удаление ключевого слова DISTINCT
(поскольку FOR ALL ENTRIES
подразумевает DISTINCT
).