Accelerare Oracle pl

Continuam subiectul optimizarii cererilor ORACLE, as vrea sa ating un ciclu de interogare SQL in PLSQL.
Poate că mulți știu deja acest lucru, dar totuși.
Cel mai adesea, interogările din plsql sunt scrise astfel:
Această abordare are un dezavantaj semnificativ - pentru fiecare înregistrare de la SELECT, ORACLE este necesar să se schimbe contextul de execuție de la SQL la PLSQL.
Acest tip de operațiune poate fi efectuată fără a schimba contextul în două moduri:
* UPDATE fără un ciclu - în versiunea simplă DA, dar nu toate ciclurile sunt atât de simple.
* Utilizați BULK COLLECT și FORALL
Cu BULK COLLECT și FORALL interogarea va avea ca rezultat următoarele:
Să analizăm codul:
* Crearea tipului "employee_ids_t" este o matrice asociativă unde cheia este PLS_INTEGER, iar valoarea = employees.employee_id% TYPE
* l_employee_ids este o variabilă de tip employee_ids_t
* COLLECT IN BULL - plasați identificatorii selectați selectați în colecția l_employee_ids. Toate înregistrările sunt plasate simultan, spre deosebire de INTO (o singură înregistrare)
* FORALL - execută UPDATE de câte ori există înregistrări în colecția l_employee_ids și folosind date din ea.

Merită remarcat faptul că FORALL nu este o buclă, ci o construcție de limbă, deci are o serie de caracteristici:
* În interiorul FORALL poate exista doar o solicitare LMD. Dacă aveți nevoie de mai multe cereri, atunci trebuie să utilizați mai multe FORALL
* Când se execută FORALL, nu se efectuează comutarea contextului. Întreaga UPDATE este executată 1 dată, ceea ce oferă un avantaj semnificativ de viteză.

Este de remarcat faptul că timpul pentru înlocuirea contextului este de asemenea consumat atunci când se apelează funcțiile utilizatorilor în interogările DML.
De exemplu:
* Contextul va fi modificat de câte ori sunt selectate mai multe înregistrări în SELECT
Pentru a evita modificarea contextului, puteți:
* Încercați să declarați funcția INLINE "PRAGMA INLINE"
* Sau, așa cum este folosit numai în LMD "PRAGMA UDF"
* Dar cea mai bună opțiune în acest caz este de a renunța la funcție și de a denormaliza deliberat interogarea la SQL pur.

Articole similare