Когда я запускаю запрос с помощью SQL Developer и использую переменные связывания, такие как :type
Мне предлагается использовать значения, а затем запросы выполняются быстрее, чем если бы я заменил переменные связывания фиксированными буквальное значение, скажем 'A'
.Запросы выполняются медленно без параметров в SQL Developer
Например первый запрос, который работает быстрее, чем второй запрос:
Первый запрос (работает 0,5 сек)
select DMDUNIT, LOC, SUM(QTY)
from hist
where dmdunit = :lv_dmdunit and type = :lv_type and loc = :lv_loc
and startdate >= sysdate - 40
GROUP BY DMDUNIT,LOC
Второй запрос (работает 1,7 сек)
select DMDUNIT, LOC, SUM(QTY)
from hist
where dmdunit = 'PROD_1' and type = 'A' and loc = 'B101'
and startdate >= sysdate - 40
GROUP BY DMDUNIT,LOC
Почему первый запрос выполняется быстрее, чем второй запрос? Какие шаги я могу предпринять, чтобы второй запрос выполнялся так же быстро, как и первый?
Это небольшой запрос и 1 секунда не имеет большого значения, но у меня также есть большие запросы, где разница между теми же запросами (params и non-params) составляет от 10 до 15 минут.
Что планы выполнения показывают для обоих запросов? Какую версию базы данных Oracle вы используете? (Кроме того, в SQL Developer вы можете установить значения привязки как часть скрипта, используя команду 'variable' и анонимный блок, если вы не хотите вводить их при запросе) –
Вероятно, это связано с« Принудительным параметром » »- выполните поиск, чтобы найти больше. – Hogan