Има най-малко 11 начина да контролирате план, без да променяте заявката. Те са изброени по-долу приблизително в реда на полезност:
- Базова линия на SQL план - Заменете един план с друг.
- SQL профили - Добавете "коригиращи" съвети към плановете. Например, профил може да каже „това обединяване връща 100 пъти повече редове от очакваното“, което индиректно променя плана.
- Съхранен контур - Подобен по идея на SQL Plan Baseline, но с по-малко функции. Тази опция е по-лесна за използване, но по-малко мощна и вече не се поддържа.
- DBMS_STATS.SET_X_STATS - Ръчното модифициране на таблица, колона и статистика на индекса може значително да промени плановете, като направи обектите изкуствено да изглеждат повече или по-малко скъпи.
- Контрол на сесия - Например
alter session set optimizer_features_enable='11.2.0.3';
. Не винаги има полезни параметри. Но един от параметрите OPTIMIZER_* може да помогне или може да сте в състояние да промените плана с недокументиран намек или деактивиране на функция като тази:alter session set "_fix_control"='XYZ:OFF';
- Системен контрол - Подобно на горното, но се отнася за цялата система.
- DBMS_SPD - Директивата за SQL план е подобна на профил, тъй като предоставя известна коригираща информация на оптимизатора. Но това работи на по-ниско ниво във всички планове и е ново за 12c.
- DBMS_ADVANCED_REWRITE - Промяна на заявка в друга заявка.
- Виртуална частна база данни - Промяна на заявка в друга заявка чрез добавяне на предикати. Не е предназначен за производителност, но вероятно можете да злоупотребите с него, за да промените пътищата за достъп до индекса.
- SQL Translation Framework - Промяна на заявка в друга заявка, преди дори да бъде анализирана. Това може да даде възможност за изпълнение на напълно "грешен" SQL.
- SQL корекция (dbms_sqldiag internal.i_create_patch) - Промяна на заявка в друга заявка. Подобно на DBMS_ADVANCED_REWRITE, но е недокументирано и може би малко по-мощно.