Посмотрите на следующий запрос: Если я прокомментирую подзапрос, он использует параллельное выполнение, иначе это не так.
После того, как запрос был
SELECT /*+ parallel(c, 20) */ 1, (SELECT 2 FROM DUAL) FROM DUAL c;
Вы могли бы найти ответ в документации :
Оператор SELECT можно распараллелить, только если выполнены следующие условия: Запрос включает в себя параллельную спецификацию подсказки (PARALLEL или PARALLEL_INDEX) или объекты схемы, на которые есть ссылка в запросе, имеют объявление PARALLEL, связанное с ними. Как минимум одинДля таблиц, указанных в запросе, требуется одно из следующих действий: Полное сканирование таблицы Сканирование диапазона индекса, охватывающее несколько разделов В списке SELECT нет скалярных подзапросов.
Оператор SELECT можно распараллелить, только если выполнены следующие условия:
Запрос включает в себя параллельную спецификацию подсказки (PARALLEL или PARALLEL_INDEX) или объекты схемы, на которые есть ссылка в запросе, имеют объявление PARALLEL, связанное с ними.
Как минимум одинДля таблиц, указанных в запросе, требуется одно из следующих действий:
Полное сканирование таблицы
Сканирование диапазона индекса, охватывающее несколько разделов
В списке SELECT нет скалярных подзапросов.
Ваш запрос находится на последнем препятствии: у него есть скалярПодзапрос в своей проекции.Если вы хотите распараллелить запрос, вам нужно найти другой способ его написания.
Одной из идей может быть не использовать подзапрос, но вы можете попробовать использовать объединение?Ваш подзапрос выглядит довольно просто, без группировки и т. Д., Поэтому не должно быть проблемой перевести его в объединение.
Возможно, оптимизатор не способен к параллельному выполнению при наличии подзапросов.