я написал SQL-запрос, как это:Fetch-Bulk-Collect с временем ForAll неточности
LOOP
FETCH cursorA
BULK COLLECT INTO structure1 LIMIT 1000;
EXIT WHEN structure1.COUNT = 0;
FORALL i IN 1 .. structure1.COUNT
-- do something;
--write time it took to finish loop
END LOOP;
Я заметил, что первый запрос выборки занимает много времени, чтобы закончить по отношению ко второму, третьему и далее запросы.
Это намеренное поведение?
Может кто-нибудь объяснить, что происходит за сценой, чтобы вызвать это?
Сколько еще? Ну, курсор должен быть открыт, и все вещи за кулисами должны быть подготовлены для выполнения этого массового сбора. –
А, может быть, я должен указать время на то, как долго накладные расходы, прежде чем он даже начнет работать! Насколько вам известно, разницы во времени не следует ожидать? – confusedKid
Проверьте план выполнения запроса. Существует ряд причин, по которым может потребоваться много времени, прежде чем он сможет начать испускать строки; например сортировка, хеш-соединения или полное сканирование таблицы (где совпадающие строки встречаются только в таблице). –