Повечето подсказки са начин да съобщим намерението си на оптимизатора. Например leading
намек, който споменавате, означава свързване на таблици в този ред . Защо е необходимо това? Често това е така, защото оптималният ред на присъединяване не е очевиден, защото заявката е написана зле или статистиката на базата данни е неточна.
Така че едно използване на съвети като leading
е да се намери най-добрият път за изпълнение, след което да се разбере защо базата данни не избира този план без подсказката. Събирането на нови статистически данни решава ли проблема? Пренаписването на клаузата FROM решава ли проблема? Ако е така, можем да премахнем подсказките и да внедрим голия SQL.
Понякога има моменти, в които не можем да разрешим този ребус и трябва да запазим съветите в Производството. Това обаче трябва да е рядко изключение. Oracle има много много умни хора, работещи върху Cost-Based Optimizer в продължение на много години, така че неговите решения обикновено са по-добри от нашите.
Но има и други съвети, които няма да мигнем да видим в Производството. append
често е от решаващо значение за настройка на обемни вложки. driving_site
може да бъде от жизненоважно значение при настройването на разпределени заявки.
Обратно, почти винаги се злоупотребява с други намеци. Да parallel
, за теб говоря. Сляпо поставяне на /*+ parallel (t23, 16) */
вероятно няма да накара вашата заявка да се изпълнява шестнадесет пъти по-бързо и не рядко ще доведе до по-бавно извличане в сравнение с еднонишково изпълнение.
Така че, накратко, няма универсално приложим съвет кога трябва да използваме подсказки. Ключовите неща са:
- разберете как работи базата данни и особено как работи базираният на разходите оптимизатор;
- разберете какво прави всяка подсказка;
- тествайте подсказани заявки в подходяща среда за настройка с данни, еквивалентни на производството.
Очевидно най-доброто място да започнете е документацията на Oracle . Ако обаче искате да похарчите малко пари, книгата на Джонатан Луис за оптимизатора, базиран на разходите е най-добрата инвестиция, която можете да направите.