Следующий запрос дается в процедуре PL / SQL
.
SELECT e.data FROM extra e WHERE e.external_id in
(SELECT * FROM TABLE (p_external_ids)).
Тип p_external_ids
- создать или заменить тип «VARCHAR2TABLE» как таблицу VARCHAR2 (4000 CHAR)
.
Oracle неэффективно выполняет запрос, используя полное сканирование таблицы. Подсказки по запросу не помогли, и необходимые индексы есть. Замена части SELECT *
жестко заданными идентификаторами сокращает время выполнения запроса в множитель 20
, когда количество строк в таблице составляет 200 000 .
Для справки требуется около 0,3 секунды для выполнения с предложением SELECT * FROM TABLE
и около 0,015 мс
для одного жестко закодированного идентификатора.
Каковы предлагаемые эффективные способы (поиск по ключу) для написания хранимой процедуры для извлечения данных из таблицы для нескольких идентификаторов ? Предоставленный тип коллекции должен использоваться для передачи списка идентификаторов хранимой процедуре.