Когда использовать Oracle подсказки?

Я делаю некоторый рефакторинг в Oracle Schema (oracle version 10), и я вижу много представлений, которые используют подсказки *+ALL_ROWS*/, В других взглядах есть и другие виды подсказок. Почему я должен использовать подсказки? БД не делает лучший выбор в базе запроса? большое спасибо!

1 ответ

Решение

Это хороший вопрос, но нет однозначного ответа на него, потому что есть разные категории подсказок, к которым применимы разные советы. http://docs.oracle.com/cd/E11882_01/server.112/e16638/hintsref.htm

ALL_ROWS - это оптимизационный подход, и совершенно правильно указать его, чтобы было ясно, что ваша цель - получить последнюю строку набора результатов как можно раньше, а не первую. Во многих случаях оптимизатор будет выводить это из запроса в любом случае, поэтому он может быть избыточным, но вы не будете вредить чему-либо, если будете его правильно использовать.

Кроме того, существуют разные категории, некоторые из которых можно охарактеризовать как предназначенные для тестирования и исследования, такие как optimizer_features_enable. Можно предположить, что подсказки, которые влияют на порядок соединения, путь доступа и операции соединения, относятся к этому типу, поскольку их иногда не рекомендуется использовать в приложениях. Однако оптимизатор не идеален и не обладает идеальной информацией, и иногда он делает выбор на основе неполной информации, которую необходимо исправить.

Некоторые подсказки, несомненно, полезны и уместны - APPEND, пожалуй, лучший пример, так как это стандартный метод вызова прямой вставки пути.

В конце очень сложно дать общий совет по этому вопросу. На самом деле каждый совет должен быть рассмотрен в отношении того, должен ли он использоваться в рабочем коде или нет, но если вы понимаете оптимизатор и понимаете, что на самом деле делают подсказки, которые вы рассматриваете, и есть ли лучшие альтернативы - например, лучшая статистика, разные Параметры инициализации или динамическая выборка (сама подсказка) - вы сможете сделать свою собственную оценку и защитить ее в случае необходимости.

Другие вопросы по тегам