У меня есть запрос, который выполняет фантастику при выполнении из SQL.INSERT во временную таблицу GTT очень медленно от PL/SQL
Это соединение между таблицей и запросом. Обе таблицы имеют около 4 млн записей. В таблице doc есть индексы растровых изображений, которые я пытаюсь дать. План Explain показывает, что они хорошо помогают, когда я вижу жабу.
Я добавил (а) 2 других подсказки, чтобы увидеть, если они помогут, как видно. Один из них - для прямого доступа APPEND и других, чтобы использовать существующий индекс BTree для pda.
Когда этот запрос выполняется для замещенных переменных из SQL, результаты выполняются мгновенно, но один и тот же запрос внутри процедуры занимает 8 секунд или более.
Помимо плана процедуры, который DBA еще не дал, какие бывают какие-либо вопиющие промахи, которые, возможно, вы думаете? Заранее спасибо.
INSERT /*+ APPEND */
INTO tmp_search_gross_docs (document_id,
last_name,
first_name,
person_doc_association_id,
association_date)
SELECT /*+INDEX(pda IDX_DOC_PDOC_DOCID) USE_NL(pda doc) */
pda.document_id,
last_name,
first_name,
person_doc_association_id,
association_date
FROM pda,
(SELECT /*+INDEX_COMBINE(attr IDX_BMP_SEARCH_FN,IDX_BMP_SEARCH_LN)*/
document_id, last_name, first_name
FROM doc attr
WHERE first_name LIKE l_first_name OR last_name LIKE l_last_name) doc
WHERE pda.document_id = doc.document_id;
) doc
WHERE pda.document_id = doc.document_id;
EXPLAIN план (от жабы для переменных связывания)
ВСТАВИТЬ ЗАЯВЛЕНИЕ ALL_ROWSCost: 1086010 Б: 15309420 CARDINALITY: 364510
11 НАГРУЗОЧНЫХ AS SELECT TMP_SEARCH_GROSS_DOCS
10 ТАБЛИЦЫ ДОСТУПА индексного ROWID ТАБЛИЦЫ PDA Стоимости: 3 байт: 20 CARDINALITY: 1
9 Стоимость вложенных циклы: 1086010 Б: 15309420 CARDINALITY: 364510
7 Таблицы ДОСТУП ROWID индексной Таблицы атр Стоимость: 23893 Б 8019220 кардинальность: 364510 6 BITMAP ПРЕОБРАЗОВАНИЯ НА ROWIDs
5 растровой или
2 BITMAP MERGE
1 растровый ИНДЕКС ДИАПАЗОН СКАН INDEX (Bitmap) IDX_BMP_SEARCH_FN 4 BITMAP MERGE
3 BITMAP ИНДЕКС ДИАПАЗОН СКАН ИНДЕКС (Bitmap) IDX_BMP_SEARCH_LN 8 INDEX RANGE SCAN ИНДЕКС IDX_PDA_EXP_DOC Стоимость: 2 Количество элементов: 1
мощность 364510 кажется выключен, как таблица содержит 3738562 строк и в течение замещенных значений столбцов в том, где отсчет только 8892.
Но, опять же, этот план по крайней мере говорит мне, что правильные индексы используются и работают очень быстро из редактора жабы.
Фактический план PL/SQL по-прежнему недоступен.
Не уверен, что это добавляет ценную информацию или нет. Но мысль все-таки отредактирует. Спасибо
Что еще вы делаете в этой процедуре? –
Не уверен, что это поможет, но в конечном итоге он создает набор записей, который затем считывается приложением. Я должен указать, что я попробовал BULK COLLECT с коллекцией на том же SQL, и это было тоже самое. Как-то чувствуется, что SELECT не принимает оптимальный путь, который он выполняет при выполнении из редактора. – user2275460