Въведение в настройката на Sql
- Sql операторите са написани за извличане/извличане на данни от базата данни. Искаме нашето sql изявление да работи бързо (sql настройка) и да предоставя резултатите за секунди.
- Лошо проектиран sql може да забави цялата операция на базата данни и да спре цялата операция. Много по-трудно е да се напише ефективен SQL, отколкото да се напише функционално правилен SQL. Настройката на производителността на sql може значително да подобри здравето и производителността на системата.
- Ключът към настройката на SQL е да се минимизират данните, до които има достъп, за да се осигури резултата. Можем да сведем до минимум данните, до които има достъп, за да предоставим резултата чрез оптимален път за търсене.
Един прост пример би бил
select * from dept where emp=10
- Сега тази заявка ще трябва да търси в цялата таблица, за да открие данните, където emp=10. Така че трябва да има достъп до пълната таблица
- Сега, ако създадем колоната index to emp, тя може просто да получи достъп до индекса и да получи резултата. Така че тук има достъп до по-малко данни
12 стъпки за извършване на настройка на Sql в Oracle
Тук са общите съвети за настройка на производителността на sql
(1) Първо трябва да имате всички необходими инструменти за настройка на sql. Трябва да имате добра информация за проследяване, форматиране на трасето, план за обяснение, четене на плана за обяснение в oracle.
Добри познания за различните методи на присъединяване, налични в Oracle и как да ги използвате ефективно
(2) Четете по-малко данни и бъдете I/O ефективни.
Колкото повече данни четете за оператора sql, толкова повече ключалки трябва да придобие и това забавя производителността. така че винаги трябва да извършва по-малко логически четения
Напишете разумен sql израз, където са правилни филтри. Проверете за броя на редовете в различните включени таблици и открийте най-добрия метод за създаване на оператора sql
(2) Използвайте добри индекси на Oracle
Индексите на B-Tree и индексите на Bitmap могат да се използват за увеличаване на производителността на заявките, ако върнатите данни са по-малко от 10%. Но трябва да бъдем внимателни, докато създаваме индекса, тъй като той трябва да се поддържа и за операции за вмъкване, актуализиране и изтриване. Така че създаването на индекс създава допълнителни разходи над много неща. Затова трябва внимателно да проучим ефекта от създаването на индекса.
(3) Избягвайте sql, който забранява използването на индекс
SQL, който деактивира индексите
(a)Функции (to_char(), to_date() и т.н.)
Поправка:преместете функцията на страната на „константа/свързваща променлива“
(b) Прехвърляне на тип
В SQL
където emp_no =10 (emp_no е varchar2)
В PL/SQL
където emp_no =v_emp_num (v_emp_num е число)
Модификатори
и идентификатор + 0 =111
и дата + 1 =системна дата (опитайте дата =системна дата – 1)
Поправка:Променете го, за да го избегнете
(4) Винаги използвайте променлива за свързване в приложението. Ако не използвате променлива за свързване в oracle, sql ще бъде анализиран всеки път и ще повлияе на производителността на базата данни. Ако съдържа променливата за свързване, sql ще бъде кеширан и по-нататъшното изпълнение няма да изисква синтактичен анализ и по този начин цялостната производителност на системата се подобрява
(5) UNION срещу ИЛИ. Използвайте UNION за заявки с два ясни пътя за изпълнение; всеки връща сравнително малък брой редове. Не използвайте union за заявки, които вероятно ще върнат голям брой редове, тъй като всички редове трябва да бъдат сортирани и повечето от тях ще бъдат отхвърлени. ИЛИ има тенденция да деактивира индекса
(6) Използвайте точната статистика на оптимизатора в таблицата, за да получите оптималния план.
(7) Ако използвате функция за израз на условието, проверете дали има базиран на функция индекс в тази колона. Ако не е налице, индексът няма да се използва
(8) Използване съществува срещу в и Не съществува срещу не в за корелирани подзаявки
(9) Избягвайте лоши практики за кодиране
Някои съвети
(a) Избягвайте декартово присъединяване. Уверете се, че всички таблици, изисквани в заявките, са необходими и са свързани една с друга
(b) Използвайте декодиране, за да избегнете многократни пътувания до базата данни
(c) Опитайте се да избегнете външно присъединяване
(d ) Понякога разлагането на логиката на малки части прави работата по-бърза
(10) Ако се опитвате да използвате сложния изглед, проверете дали вместо това могат да се използват базовите таблици, тъй като изгледът има тенденция да влошава производителността
(11) Използвайте UNION ALL Vs UNION, ако знаете, че извлечените данни няма да имат дублиращи се редове
( 12) Използвайте подсказки за оптимизиране на плана за изпълнение. Понякога може да се използва намек за промяна на плана за изпълнение на заявката, така че да се поеме по най-оптималния път.
Понякога преглеждането на обвързване създава лош план, така че в този случай поставянето на необходимия намек за коригиране на плана помага за получаване на добро представяне всеки път
Най-често срещаните съвети са
/*+ LEADING (псевдоним на таблица) */ определя таблица, с която да започне присъединяването
/*+ FIRST_ROWS */ много добър за онлайн екрани – предпочита ВГЛАЖДЕНИ БРИГИ
/*+ ИНДЕКС ( псевдоним на таблица. име на индекс) */ определя индекса, който искате да използвате. Забележка:ако индексът бъде изпуснат и пресъздаден и името се промени, тогава подсказката вече не е валидна.
/*+ USE_NL (псевдоним на таблица 1 псевдоним на таблица 2)*/ иска от оптимизатора да използва присъединяването на вложен цикъл за посочените две таблици
Избягвайте ненужните съвети за оптимизатор и ги използвайте внимателно
Това са някои от съветите за избягване на проблеми и за настройка на sql. Sql настройката е голям океан и можете да научите неща само като практикувате. Успех!!
Също чете
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm