Настройка Oracle SQL на основе подсказок - что хорошего в последних версиях? - PullRequest
2 голосов
/ 13 мая 2011

Я читал, что CBO оракула (в последних версиях) настолько хорош, что даже если задан наихудший порядок соединения, CBO автоматически выбирает лучший порядок соединения.Так будут ли подсказки типа ORDERED приносить пользу в последних версиях (10,11)?Может ли CBO пропустить оптимальный порядок соединения?Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Мой личный опыт показывает, что с Oracle 10g / 11g вы вряд ли сможете улучшить любой запрос с подсказками. Чаще всего они оказываются хуже, чем вы считаете оптимальным . CBO действительно значительно улучшился.

Все еще существуют некоторые (очень отдаленные) ограничения для средств преобразования запросов, особенно с довольно сложными конструкциями OUTER JOIN, поскольку внутренне синтаксис ANSI по-прежнему отображается на некоторые архаичные конструкции Oracle, включающие оператор (+). Кроме этого, и других очень отдаленных случаев, я не думаю, что подсказки больше необходимы.

Вы можете настроиться намного лучше, переписав некоторый SQL или добавив ограничения / индексы. Конечно, это справедливо только в том случае, если ваши статистические данные и гистограммы верны, актуальны и разумны, как правильно заметил Скаффман

1 голос
/ 13 мая 2011

Результаты Oracle CBO зависят от стольких параметров, что я вряд ли могу предсказать результирующий план в реальной системе. Как правило, я предлагаю вам не использовать подсказки, если вы не уверены, должны использовать их.

Что касается ORDERED подсказки из моего опыта, очень редко вы должны сообщать Oracle точный порядок соединений.

В любом случае, лучший способ выяснить это - провести эксперименты самостоятельно, попробовать и выбрать лучшее решение:)

Я предлагаю вам прочитать «Эффективный Oracle от дизайнера» Тома Кайта - есть очень хорошая глава об оптимизации запросов и о том, как работает CBO.

...