Проблема эффективности плана запроса Oracle

Следующий запрос дается в процедуре 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 мс для одного жестко закодированного идентификатора.

Каковы предлагаемые эффективные способы (поиск по ключу) для написания хранимой процедуры для извлечения данных из таблицы для нескольких идентификаторов ? Предоставленный тип коллекции должен использоваться для передачи списка идентификаторов хранимой процедуре.

5
задан Leonid 15 November 2010 в 14:48
поделиться