Oracle gyorsulás pl
Folytatódik a téma optimalizálása Oracle lekérdezés, szeretném megérinteni ciklusban SQL lekérdezés PLSQL.
Talán már ismert, hogy sok, de akkor is.
Leggyakrabban PLSQL kérések vannak írva a következő:
Ez a megközelítés jelentős hátránya - minden rekordot a SELECT, Oracle változtatni a végrehajtás keretében egy SQL PLSQL.
Ez a fajta műveletet el lehet végezni anélkül, hogy megváltoztatná a kontextusban, 2 módja van:
* UPDATE nélkül ciklus - egy egyszerű kiviteli, igen, de nem minden ciklusban annyira egyszerű.
* Egy BULK gyűjt és forall
A tömeges összegyűjti és forall lekérdezés a következő:
Elemezzük a kódot:
* Új típusú "employee_ids_t" - egy asszociatív tömb, ahol PLS_INTEGER kulcs és az érték = employees.employee_id% TYPE
* L_employee_ids - egy változó típusát employee_ids_t
* BULK COLLECT INTO - tegye a kiválasztott válasszuk azonosítók gyűjtemény l_employee_ids. Minden bejegyzés kerülnek egyszerre, ellentétben a hagyományos INTO (egy rekord)
* A design forall - UPDATE végez ahányszor rekordok gyűjtése l_employee_ids és az adatokat is.
Érdemes megjegyezni, hogy ez nem a forall hurok, és a nyelv kialakítása úgy, hogy számos jellemzői:
* Belső forall csak 1 DML lekérdezés. Ha azt szeretnénk, több lekérdezés, meg kell, hogy több forall
* Ha a forall nincs összefüggésben kapcsolót. Minden UPDATE végezzük 1-szer, ami jelentős sebesség előnye.
Érdemes megjegyezni, hogy abban az időben a környezet változása is fogyasztja a hívás egyedi funkciók DML lekérdezések.
Például:
* A kontextus megváltozik, ahányszor rekordok válassza a SELECT
Hogy ne változzék összefüggésben, akkor:
* Próbálja hogy állapítsa meg a függvény inline „PRAGMA inline”
* Vagy csak akkor kell használni DML „PRAGMA UDF”
* De a legjobb megoldás ebben az esetben -, hogy feladja jellemzői és tudatosan denormalizirovat kérést tiszta SQL.