Получаете ли вы разные планы запросов, когда включаете подсказку?Я предполагаю, что вы делаете, основываясь на своем описании проблемы.
Когда вы выполняете запрос в Oracle, база данных обычно не материализует весь набор результатов в любой момент времени (очевидно, возможно, придетсяесли вы укажете предложение ORDER BY
, которое требует, чтобы все данные были материализованы до сортировки).Oracle фактически не начинает материализовывать данные, пока клиент не начнет получать данные.Он выполняет достаточно запроса, чтобы сгенерировать сколько угодно строк, которые клиент запросил для выборки (в вашем случае это звучит как 10), возвращает эти результаты клиенту и ждет, пока клиент запросит дополнительные данные, прежде чем продолжить обработку запроса.query.
Похоже, что при включении подсказки FIRST_ROWS
план запроса изменяется таким образом, что его выполнение обходится дороже.Очевидно, что это не цель FIRST_ROWS
подсказки.Цель состоит в том, чтобы сказать оптимизатору сгенерировать план, который делает выборку первых N строк более эффективной, даже если это делает выборку всех строк из запроса менее эффективной.Это приводит к тому, что оптимизатор предпочитает такие операции, как сканирование индекса, а не сканирование таблицы, где сканирование таблицы может быть более эффективным в целом.Похоже, в вашем случае оценки оптимизатора неверны, и в итоге выбирается план, который в целом менее эффективен.Это часто означает, что некоторые статистические данные по некоторым объектам, на которые ссылается ваш запрос, являются неполными или неверными.