Как оптимизировать запрос? Вариантов много, все зависит от поставленной задачи и самого запроса. Но есть довольно таки, простой, но в то же время достаточно эффективный способ оптимизации, при котором нет необходимости менять условия в запросе, разбирать JOIN и т.п.
Например, при выполнении данного запроса:
трассировка SQL (ST05), показала время выполнения > 20 сек., не очень хорошее время, а если учесть, что этот запрос стоит в цикле, и выбирается около шести тысяч записей при каждом обращении, то все становится совсем грустно...
А теперь о волшебстве: необходимо, порядок следования выбираемых полей внутренних таблиц сделать таким же, как и в таблице словаря. Выглядит это так:
Теперь трассировка показывает совсем другой результат:
Совсем не плохо, учитывая, что мы просто поменяли следование полей внутренней таблицы. Исходя из этого конкретного запроса, таблицы участвующие в нем ANLA и ANLZ не буферизируются, а значит можно попробовать применить указания для БД, в миру HINTS, а конкретно HINTS &REPARSE&'. Основное назначение данного указателя формирование оптимального плана выполнения запроса.
Снова запускаем трассировку:
Оптимизация выполнена, без разбора условий запроса, без изменения кода программы.
P.S.
Актуально для БД Oacle.
Например, при выполнении данного запроса:
трассировка SQL (ST05), показала время выполнения > 20 сек., не очень хорошее время, а если учесть, что этот запрос стоит в цикле, и выбирается около шести тысяч записей при каждом обращении, то все становится совсем грустно...
А теперь о волшебстве: необходимо, порядок следования выбираемых полей внутренних таблиц сделать таким же, как и в таблице словаря. Выглядит это так:
Совсем не плохо, учитывая, что мы просто поменяли следование полей внутренней таблицы. Исходя из этого конкретного запроса, таблицы участвующие в нем ANLA и ANLZ не буферизируются, а значит можно попробовать применить указания для БД, в миру HINTS, а конкретно HINTS &REPARSE&'. Основное назначение данного указателя формирование оптимального плана выполнения запроса.
Оптимизация выполнена, без разбора условий запроса, без изменения кода программы.
P.S.
Актуально для БД Oacle.
Вот ещё видео в тему оптимизации кода ABAP программы с примерами, возможно кому-то пригодится: Оптимизация ABAP кода
ОтветитьУдалить