Oracle
 sql >> база данни >  >> RDS >> Oracle

Има ли начин да принудите Oracle да промени плана на заявка, без да използвате подсказки?

Има най-малко 11 начина да контролирате план, без да променяте заявката. Те са изброени по-долу приблизително в реда на полезност:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на функцията Oracle to_date за низ от дата с милисекунди

  2. Извличане на информация за тип данни за колони в Oracle OCCI ResultSet

  3. ПРОВЕРИТЕ ограничение за датата на раждане?

  4. Разделен низ с регулярен израз на Oracle от последно срещане

  5. Дефинирано от потребителя изключение с персонализирано съобщение