Это ожидаемое поведение ...
3 медленный, потому что Oracle выполнит «полное сканирование таблицы», что означает, что ваши индексы там не помогают (ваше предложение where не содержит никакой константы или диапазона и является неограниченным, что означает, что независимо от того, какой индекс вы используете, все строки потенциально кандидаты на условие соединения.
Возможные улучшения:
Во-первых, проверьте правильность индексов в столбцах join / pk (id в my_slow_view и active_ids). Это необходимо для второго шага:
Во-вторых, сгенерируйте статистику таблицы для вашей таблицы и представлений, что даст возможность оптимизатору кеш-памяти Oracle.
(Это должно работать, потому что предполагается, что ваша таблица active_ids достаточно мала, чтобы быть полностью в памяти.)
Второй подход:
Напишите хранимую процедуру в PL / SQL, где ваш идентификатор является входным параметром, и переписайте свой SQL, чтобы он использовал связанный параметр.
Это должно дать вам необходимую гибкость (без жестко заданных идентификаторов) и скорость самого быстрого запроса.