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

Кога да използвате подсказки в заявка за оракул

Повечето подсказки са начин да съобщим намерението си на оптимизатора. Например leading намек, който споменавате, означава свързване на таблици в този ред . Защо е необходимо това? Често това е така, защото оптималният ред на присъединяване не е очевиден, защото заявката е написана зле или статистиката на базата данни е неточна.

Така че едно използване на съвети като leading е да се намери най-добрият път за изпълнение, след което да се разбере защо базата данни не избира този план без подсказката. Събирането на нови статистически данни решава ли проблема? Пренаписването на клаузата FROM решава ли проблема? Ако е така, можем да премахнем подсказките и да внедрим голия SQL.

Понякога има моменти, в които не можем да разрешим този ребус и трябва да запазим съветите в Производството. Това обаче трябва да е рядко изключение. Oracle има много много умни хора, работещи върху Cost-Based Optimizer в продължение на много години, така че неговите решения обикновено са по-добри от нашите.

Но има и други съвети, които няма да мигнем да видим в Производството. append често е от решаващо значение за настройка на обемни вложки. driving_site може да бъде от жизненоважно значение при настройването на разпределени заявки.

Обратно, почти винаги се злоупотребява с други намеци. Да parallel , за теб говоря. Сляпо поставяне на /*+ parallel (t23, 16) */ вероятно няма да накара вашата заявка да се изпълнява шестнадесет пъти по-бързо и не рядко ще доведе до по-бавно извличане в сравнение с еднонишково изпълнение.

Така че, накратко, няма универсално приложим съвет кога трябва да използваме подсказки. Ключовите неща са:

  1. разберете как работи базата данни и особено как работи базираният на разходите оптимизатор;
  2. разберете какво прави всяка подсказка;
  3. тествайте подсказани заявки в подходяща среда за настройка с данни, еквивалентни на производството.

Очевидно най-доброто място да започнете е документацията на Oracle . Ако обаче искате да похарчите малко пари, книгата на Джонатан Луис за оптимизатора, базиран на разходите е най-добрата инвестиция, която можете да направите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как най-добре да управлявате исторически стойности за търсене в база данни?

  2. Групово вмъкване в Oracle с помощта на .NET

  3. Списък за връщане<String> с помощта на Spring jdbc от съхранена процедура на Oracle с персонализиран обект

  4. Обединяването на връзки задължително ли е в ODP.NET?

  5. Entity Framework Core - Take(1), Single(), First()... Не работи с Oracle Provider (ORA-00933:SQL командата не е приключила правилно)