08. september 2004 - 21:24Der er
3 kommentarer og 2 løsninger
Dynamisk sql
Jeg har oprettet noget dynamisk sql, og har erfaret at det tager væsentligt længere tid at tilgå databasene med dynamisk sql, end det tager at tilgå dem med hardkodet sql. Er det normalt? for så kan dynamisk sql jo ikke bruges til ret meget.
Nu kommer det an på hvad du mener med væsentligt længere tid, men det er da rigtigt at fordi koden ikke er kendt af Oracle på forhånd, skal det jo altså lige parses, og det tager tid, men så meget tid er det altså heller ikke. Hvis det tager rigtigt langt tid, tyder det mere på at du mangler nogle indexes.
Altså, dynamisk SQL forstået som execute immediate "<blah>" hvor <blah> er noget sql genereret af en anden rutine?
Hvis det er meget stort og komplekst, kan det skyldes, at der skal foretages en yderligere parsing af SQL'en, da den ikke kan genbruge en tidligere execution plan. Er det på en server der kører cost-based, kan det endvidere skyldes, at den går ud og foretager en række stikprøver på de data der skal benyttes, for at udregne den rigtige execution plan. Den kan desuden godt finde på at skifte mening undervejs.
Sørg eventuelt for at have kørt en dbms_stats.gather_schema_stats eller blot table stats, for at give serveren en bedre mulighed for at orientere sig.
Hvis det er SQL indeni et loop, så se om du kan bruge bind-variable istedet for at bruge konstanter med din dynamiske SQL. Og luk spørgsmålet eventuelt spørgsmålet, hvis gather_schema_stats hjalp :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.