Existuje alespoň 11 způsobů, jak ovládat plán bez úpravy dotazu. Níže jsou uvedeny zhruba v pořadí podle užitečnosti:
- Základní plán SQL – Nahraďte jeden plán jiným.
- Profily SQL - Přidejte do plánů "opravné" rady. Profil může například říkat „toto spojení vrátí 100krát více řádků, než se očekávalo“, což nepřímo změní plán.
- Uložená osnova - Myšlenka podobná základnímu plánu SQL, ale s méně funkcemi. Tato možnost je jednodušší na použití, ale méně výkonná a již není podporována.
- DBMS_STATS.SET_X_STATS – Ruční úprava statistik tabulek, sloupců a indexů může výrazně změnit plány tím, že objekty budou uměle vypadat více či méně nákladné.
- Řízení relace – Například
alter session set optimizer_features_enable='11.2.0.3';
. Ne vždy existují užitečné parametry. Ale může pomoci jeden z parametrů OPTIMIZER_* nebo můžete změnit plán pomocí nezdokumentované nápovědy nebo deaktivovat funkci, jako je tato:alter session set "_fix_control"='XYZ:OFF';
- Ovládání systému - Podobné jako výše, ale platí pro celý systém.
- DBMS_SPD - SQL Plan Direktiva je podobná profilu v tom, že poskytuje některé opravné informace pro optimalizátor. Ale to funguje na nižší úrovni, napříč všemi plány, a je to nové pro 12c.
- DBMS_ADVANCED_REWRITE – Změňte dotaz na jiný.
- Virtuální soukromá databáze - Změňte dotaz na jiný dotaz přidáním predikátů. Není určen pro výkon, ale pravděpodobně ho můžete zneužít ke změně přístupových cest k indexu.
- SQL Translation Framework - Změňte dotaz na jiný dotaz ještě předtím, než bude analyzován. To může umožnit spuštění zcela „nesprávného“ SQL.
- Oprava SQL (dbms_sqldiag internal.i_create_patch) - Změňte dotaz na jiný. Podobné jako DBMS_ADVANCED_REWRITE, ale je nezdokumentované a možná o něco výkonnější.