Frågor, eller samtal till lagrade procedurer/användardefinierade funktioner åberopas ofta flera gånger, antingen inifrån en slinga i ett programprogram, eller från var/välj klausulen i en yttre fråga. När den åberopade frågan/förfarandet/funktionen innebär tillgång till databas, kan ett naivt genomförande resultera i mycket dålig prestanda, på grund av slumpmässig I/O. Frågedekoration tar upp detta problem i det speciella fallet med inhägnade underkvitton, men är inte tillämpligt på annat sätt. Detta problem hanteras traditionellt genom att manuellt skriva om programmet för att göra det set-orienterat, genom att skapa ett parti av parametrar, och genom att skriva om frågan / förfarandet för att arbeta på partiet i stället för en parameter i taget. Sådan manuell omskrivning är tidskrävande och fel benägna. I detta dokument föreslår vi tekniker som kan användas för att göra följande. (a) Skriv automatiskt om program för att ersätta flera samtal till en fråga med ett batchat samtal till en motsvarande omskriven fråga. (b) Skriv om en lagrad procedur/funktion för att acceptera ett parti bindningar, i stället för en enda bindning. Därmed skulle till exempel en fråga som skulle ha åberopats många gånger från olika anrop av ett lagrat förfarande automatiskt ersättas av en (eller några) anrop av en batched version av frågan. Våra tekniker kan tillämpas på koder skrivna på alla språk, såsom procedurversioner av SQL, eller Java. Vi har implementerat de föreslagna omskrivningstekniker för en delmängd av Java, där databasoperationer utförs med hjälp av ett API över JDBC. Vi visar fördelarna på grund av våra omskrivningar med tre fall från verkliga applikationer, som stod inför betydande prestandaproblem på grund av upprepade anrop av frågor / förfaranden.
REF överväga att skriva om slingor i databasapplikationer och lagrade procedurer, att omvandla iterativa utföranden av frågor till en enda körning av en set-orienterad form av frågan.
Rewriting procedures for batched bindings
{'venue': 'PVLDB', 'journal': 'PVLDB', 'mag_field_of_study': ['Computer Science']}