ПредишенСледващото

SQL Съвети Oracle документация

  • "За синтаксис: / * + Съвет Съвет ... * / PL / SQL за интервал между" + "и първата буква от съветите е със стойност при липса на пространство върха може да бъде пренебрегната, т.е. / * + ALL_ROWS * / правилното използване и / * + ALL_ROWS * / - грешен
  • Съвети са винаги "тласък", за да се използват за оптимизиране на разходите на базата (цена оптимизатор на базата) - с изключение на подканите ПРАВИЛО
  • Ако заявката използва псевдонимите (таблица псевдоним), върховете трябва също да използват псевдоними, вместо имена на таблици:
  • В poskazkah не трябва да укажете името на схемата:
  • Неправилно съвети (невалидни съвети) се игнорират без предупреждение ... неправилен съвет може да не е очевидна, като:
  • индикация FIRST_ROWS карти (за първия ред) за заявка с ORDER BY (защото данните трябва да бъдат сортирани преди първите заявка низове, се върнат, first_rows на употреба, които не могат да дадат желания резултат)
  • посочено в операции подсказка за данни (пътя за достъп) трябва да бъде на разположение за пример: INDEX намек посочва несъществуваща индекс ще бъдат игнорирани без никаква грешка ... "

- обща цел оптимизатор

- как да получите достъп

- методи за свързване

- методи за прилагане на [под] Query

- Статистика

- преобразуване на [а] искане

- използването на курсори

- паралелно изпълнение

Цели за оптимизация и подходи намеци

Съвети определящи общи цели и подходи за оптимизиране на плана за изпълнение на заявката, включително правила и методи за достъп до данни. Съответстват на (почти) стойностите на описанията на параметрите OPTIMIZER_MODE

/ * + ПРАВИЛО * /

Тя не се поддържа официално, като се започне с Oracle 10, които се използват за оптимизиране на точно oredelonnym правила (член Въз оптимизация), без да отчита статистиката на обекти на базата данни. Описание на правилата за определяне на inilizatsionnogo optimizer_mode = правило

По-специално, въпреки използването на съвети ПРАВИЛО Oracle ще използва оптимизация на разходите-базирани. ако:

  • ПРАВИЛО освен други съвети се използват в заявката
  • partitsirovannye или заявка използва таблица организирана като индекс (IOT), или материализирани изглед (mview)
  • заявка използва клевети извадка, електронни таблици, дизайн ГРУПА Задава
  • заявката използва ANSI лява | пълен външен присъединят
  • заявката се изпълнява паралелно
  • употребяван кадър курсора (от [SCN | клеймото])
  • ...

В 11,2 при използване на RBO оптимизатор следа може да се конфигурира и използва някои искания за преобразуване, с изключение на разходите Въз основа на заявките Трансформация (което е логично :) - виж коментари за състоянието на индекса неизползваем, INDEX бързо и RBO актуализирана в Oracle 11.2.

/ * + ALL_ROWS * /

«ALL_ROWS Съвет определя целите на ранното прилагане на цялата заявка с минимална консумация на ресурси (най-пропускателна способност при отстраняване на целия набор резултат). В настъпили едновременно или ALL_ROWS FIRST_ROWS предоставя съвети, определящи методите за достъп до данни (NO_INDEX_SS, INDEX_COMBINE.) Или методи показва, обекти на база данни асоциация (ВОДЕЩА, USE_NL_WITH_INDEX.), В оптимизатор дава предпочитание подканва методи за достъп и сдружение "

/ * + FIRST_ROWS * /

Поради Oracle 8 документация: "Съвет FIRST_ROWS подход определя стойността (разходно ориентиран подход), за да се оптимизира блокове на заявки (изявление блок) с цел по-добро време за реакция (време за реакция минимален поток на ресурси, за да се върнете на първия ред на искането.). В съответствие с този накрайник оптимизатор прави следния предпочитание [при избора на операциите за достъп до данни и методи за свързване]

  • В присъствието на оптимизатор използва сканиране индекс (индекс на сканиране), вместо пълна маса сканиране (пълна маса сканиране)
  • Ако сканирането е достъпно на индекс (индекс на сканиране), оптимизатор избира вложени цикъла присъединят вместо подредени-сливане присъединят когато сканирани индексира маса може да се използва като маса задвижване (вътрешна маса) операции за вложени цикъла
  • Ако използването на индекс (индекс сканиране) на може да се използва за получаване на данните сортирани (по ред, определен фраза Подреждане по), оптимизатор избира индекса, за да помогне да се избегне допълнително сортиране "

От Oracle 9i: «FIRST_ROWS Съвет каза без аргументи са предназначени за оптимизиране на плана за изпълнение за началото на връщането на първия низ заявка се съхранява само за обратна съвместимост (обратна съвместимост) и плановете за стабилност за изпълнение (стабилност план)»

Стойността на параметъра inilizatsionnogo OPTIMIZER_MODE = FIRST_ROWS (което е еквивалентно на използването на съвети FIRST_ROWS за всички заявки) annonsiruetsya документация до версия Oracle 11.2

/ * + FIRST_ROWS (N) * /

Оптимизиране на базата на разходите (Cost Въз Optimization) + правилата за използване (за предпочитания при избора на план), за да получат най-доброто време отговор за първите N реда. Планът се изчислява като се вземе предвид стойността на п, като желаното количество от избраната заявка редове (заявка кардиналност).

Аз не разбирам фразата в документа. "Подобрените ще игнорира тази намек изречения в SQL изтриете и актуализирането и изберете заявка вкл.блокиране операции като сортиране и групиране. Тези SQL твърдения не могат да бъдат оптимизирани за най-малкия времето за отговор (най-добър време за реакция), тъй като Oracle трябва да обработва всички низа на заявката преди завръщането на първия резултат ред. При задаване на тази подкана искания от този тип са оптимизирани с цел получаване на по-добро време всички заявка низове с минимална консумация на ресурси (най-пропускателна способност. ALL_ROWS както при използване на карти) "

Oracle винаги използва режим ALL_ROWS вътрешно за изявление ГСД - там е един добър пример за версия 10.2 в Dion Чо блог

В Oracle 11.2, нищо не се е променило - независимо от броя на редовете се обновява (редове), инсталиран ROWNUM функция или за изпълнение планове (с изключение на допълнителна операция COUNT STOPKEY), разходи, няма очакваното време (Time) не се променят:

- когато се опитват да се актуализира само един ред Oracle избира един и същ план с една скъпа операция HASH JOIN ПОЛУ (използва се при заявка строителство има такъв) - по-подходяща за всички редове от таблицата се актуализира (режим ALL_ROWS)

Прост тест, за да се покаже как различни режима ALL_ROWS. FIRST_ROWS и FIRST_ROWS (н) да повлияе на поведението на оптимизатор: Всъщност, в плановете за изпълнение и методите за достъп до данни + разходи + Редове :) Примери за сортиране или групиране безсмислени условия, използвайки на_обект> 1 - които отговарят на всички редове на Т1 маса - за създаването на работни състояние на маса минути (на_обект) = 2) *:

*) Статистика за Т1 маса е по-уместни и оптимизатор "знае" за минималните и максималните стойности T1.Object_id:

или поне така е по-лесно:

Съвети за достъп пътя

Съвети, определящи конкретни начини за достъп до данни, процедурата и прилагат методи, които съчетават междинни набори от данни (комплекти с резултати) *

Том Кайт наричаме тези улики лоши (лоши съвети):

"Лоши следи показват как да се процедира оптимизатор [когато накара], който се използва индекс, в което да се обработи маса, чрез който операция (присъединят техника) до получаване на съединение [източник данни] на"

*) Преди приложение е необходимо да се вземе предвид вероятността от промени в системата на статистиката и обекти (таблици и индекси), използвани при заявка в крак с времето и, като следствие, възможно не е оптимално функциониране, сочеща за бъдещи набори от данни. Планът за изпълнение, оптимизирано използването на този тип съвети в развойна среда, тя може да бъде по-малко от оптималното за борба бг (система за производство), поради различните набори от данни, както и характеристиките на системата ( "желязо")

/ * + ВОДЕЩА ([@query_block] [tablespec], [tablespec].) * /

«ВОДЕЩА намек уточнява, оптимизатор за да използвате по-горе процедура за достъп до таблиците в плана за изпълнение на строителството ... по-гъвкав от ОТСЪДИ ... напълно пренебрегнати, когато се използват две или повече конфликтни ВОДЕЩИ намеци. ОТСЪДИ намек за оптимизатор има предимството на някои ръководители »

Във версия 11.2 могат да бъдат игнорирани от оптимизатор при извършване на реализации на базата на разходите (Cost-Based Query трансформация), например, Таблица Разширяване

/ * + Осъжда * /

«ОТСЪДИ намек уточнява Oracle [когато накара] провеждане маси връзка в същия ред, както са изброени в таблица ОТ структура. Oracle препоръчва да използвате вместо поръчаните ВОДЕЩИТЕ намек е по-гъвкав ... ", т.е. дава оптимизатор повече опции при избора на плана за изпълнение

/ * + USE_HASH ([@query_block] [tablespec] [tablespec] ...) * /
/ * + NO_USE_HASH ([@query_block] [tablespec] [tablespec] ...) * /

... показва, оптимизатор за използване / не се използва хеш се присъединят към операцията за свързване на всеки от споменатите таблици с други източници на данни Операция КИ: Hash на присъединяване

/ * + USE_NL ([@query_block] [inner_table]) * /
/ * + NO_USE_NL ([@query_block] [inner_table]) * /
/ * + USE_NL_WITH_INDEX ([@query_block] inner_table [indexspec]) * /

Игор, Благодаря ви много за материала, което сте направили страхотна работа!

Аз имам един въпрос. Моля, попълнете статия, ако знаете как да се действа в такива ситуации.
Ти пишеш:
«DRIVING_SITE включва изпълнението на управление (картографиране) на всички курсора (а не отделни подзаявки) ... [но можете да отложи прилагането на курсора / подзаявка в отдалечената преглед]"
Това е факт. Тя не се получи, за да изпратите подзаявка изцяло на отдалечения сървър. NO_MERGE не помогне, различни и GROUP BY в подзаявка отсъства. В резултат на това всяка стъпка от подзаявка изцяло изтеглен от дистанционното управление към местната власт и само на локалния сървър се случва, стреляйки предикати за достъп.

Добър ден, Дмитрий

би било добре, разбира се, за да видите заявка / testkeys изцяло)

Подкрепете проекта - споделете линка, благодаря!