|
| prepared statement vs stored procedure Fra : Michael Rasmussen |
Dato : 19-11-05 00:41 |
|
Hej alle,
Jeg har netop lavet et lille testprogram, der skulle påvise performance
forskelle mellem PreparedStatement og CallableStatement. Som databaser har
jeg anvendt MySQL-5.0 og PostgreSQL-8.1. SDK er 1.5 og som connector har
jeg anvendt mysql-connector-java-3.1.11 og postgresql-8.1-404.jdbc3.
Mine test har vist, at PreparedStatement performer en del bedre end
CallableStatement. Nogen her med samme erfaring? Nogen der har et bud på,
hvorfor det forholder sig sådan?
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Arne Vajhøj (19-11-2005)
| Kommentar Fra : Arne Vajhøj |
Dato : 19-11-05 09:26 |
|
Michael Rasmussen wrote:
> Jeg har netop lavet et lille testprogram, der skulle påvise performance
> forskelle mellem PreparedStatement og CallableStatement. Som databaser har
> jeg anvendt MySQL-5.0 og PostgreSQL-8.1. SDK er 1.5 og som connector har
> jeg anvendt mysql-connector-java-3.1.11 og postgresql-8.1-404.jdbc3.
>
> Mine test har vist, at PreparedStatement performer en del bedre end
> CallableStatement. Nogen her med samme erfaring? Nogen der har et bud på,
> hvorfor det forholder sig sådan?
Stored procedues i MS SQLServer har været anbefalet
i mange år som optimering fordi de blev "compilet" inde i
serveren (execution plan gemt). Og selvom der er et
par ting med småt man skal huske at læse (nogle sp kan
der faktisk ikke genbruges execution plan for) så holder
det normalt stik i praksis.
Men gør MySQL og PostgreSQL det samme ?
Jeg kender mest til MySQL, som jeg ikke mener gør det.
Endvidere en sp jo nyt i 5.0 og derfor næppe optimeret
færdigt endnu.
Så for MySQL er jeg ikke overrasket.
Arne
| |
Michael Rasmussen (19-11-2005)
| Kommentar Fra : Michael Rasmussen |
Dato : 19-11-05 11:21 |
|
On Sat, 19 Nov 2005 09:25:47 +0100, Arne Vajhøj wrote:
>
> Stored procedues i MS SQLServer har været anbefalet i mange år som
> optimering fordi de blev "compilet" inde i serveren (execution plan gemt).
> Og selvom der er et par ting med småt man skal huske at læse (nogle sp
> kan der faktisk ikke genbruges execution plan for) så holder det normalt
> stik i praksis.
>
Har du adgang til MSSQL? Kunne du, ifald jeg sendte koden, overtales til
at prøve det i praksis?
Min opfattelse var også, at stored procedures var compileret, men ud fra
et teoretisk synspunkt burde det samme forholde sig med PreparedStatement.
Ideen er jo, at du sender SQL indeholdende place holders, som databasen
så compilere til en "anonym" stored procedure. Jeg kan ikke lige huske,
hvor jeg har læst det, men det var en artikel skrevet af Michael
Stonebraker, hvor han gennemgik implementationen af Ingress. Derfor er min
påstand, at i teorien burde stored procedures kun være marginalt
hurtigere end prepared statements.
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Arne Vajhøj (19-11-2005)
| Kommentar Fra : Arne Vajhøj |
Dato : 19-11-05 11:43 |
|
Michael Rasmussen wrote:
> On Sat, 19 Nov 2005 09:25:47 +0100, Arne Vajhøj wrote:
>>Stored procedues i MS SQLServer har været anbefalet i mange år som
>>optimering fordi de blev "compilet" inde i serveren (execution plan gemt).
>>Og selvom der er et par ting med småt man skal huske at læse (nogle sp
>>kan der faktisk ikke genbruges execution plan for) så holder det normalt
>>stik i praksis.
>
> Har du adgang til MSSQL? Kunne du, ifald jeg sendte koden, overtales til
> at prøve det i praksis?
MSDE 2000 og 2005 Express er grais.
Men jeg har dem installeret ja.
> Min opfattelse var også, at stored procedures var compileret, men ud fra
> et teoretisk synspunkt burde det samme forholde sig med PreparedStatement.
> Ideen er jo, at du sender SQL indeholdende place holders, som databasen
> så compilere til en "anonym" stored procedure. Jeg kan ikke lige huske,
> hvor jeg har læst det, men det var en artikel skrevet af Michael
> Stonebraker, hvor han gennemgik implementationen af Ingress. Derfor er min
> påstand, at i teorien burde stored procedures kun være marginalt
> hurtigere end prepared statements.
PreparedStatement er et API. Implementationen kan være meget
forskellig fra database til database. For kort tid siden lavede
jeg en sammenligning af PreparedStatement med Statement.
PreparedStatement var meget hurtigere på Oracle, men
langsommere med MySQL.
Arne
| |
Michael Rasmussen (19-11-2005)
| Kommentar Fra : Michael Rasmussen |
Dato : 19-11-05 12:08 |
|
On Sat, 19 Nov 2005 11:43:02 +0100, Arne Vajhøj wrote:
>
> MSDE 2000 og 2005 Express er grais.
>
> Men jeg har dem installeret ja.
>
Jeg har kun Windows på arbejdet, og der må jeg ikke installere noget,
så hvis?
>
> PreparedStatement er et API. Implementationen kan være meget forskellig
> fra database til database. For kort tid siden lavede jeg en
> sammenligning af PreparedStatement med Statement. PreparedStatement var
> meget hurtigere på Oracle, men langsommere med MySQL.
>
Jeg så ingen markant forskel på MySQL og PostgreSQL, så måske det har
ændret sig til det bedre i MySQL 5.0, eller også er PostgreSQL blot lige
så langsom som MySQL
Som jeg har forstået det, vil JDBC emulere PreparedStatement, hvis det
ikke er understøttet af databasen, eller har jeg misforstået det? Dette
kunne være begrundelsen, hvis du har testet med MySQL 3.x, da denne ikke
understøttede PreparedStatement.
Hvilken version af Oracle prøvede? Vi har Oracle 10i på arbejdet, så
jeg vil prøve min test på arbejdet.
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Arne Vajhøj (19-11-2005)
| Kommentar Fra : Arne Vajhøj |
Dato : 19-11-05 13:18 |
|
Michael Rasmussen wrote:
> On Sat, 19 Nov 2005 11:43:02 +0100, Arne Vajhøj wrote:
>>MSDE 2000 og 2005 Express er grais.
>>
>>Men jeg har dem installeret ja.
>
> Jeg har kun Windows på arbejdet, og der må jeg ikke installere noget,
> så hvis?
Gerne.
> Som jeg har forstået det, vil JDBC emulere PreparedStatement, hvis det
> ikke er understøttet af databasen, eller har jeg misforstået det? Dette
> kunne være begrundelsen, hvis du har testet med MySQL 3.x, da denne ikke
> understøttede PreparedStatement.
>
> Hvilken version af Oracle prøvede? Vi har Oracle 10i på arbejdet, så
> jeg vil prøve min test på arbejdet.
4.1 og 9i
Arne
| |
Michael Rasmussen (19-11-2005)
| Kommentar Fra : Michael Rasmussen |
Dato : 19-11-05 14:21 |
|
On Sat, 19 Nov 2005 13:18:04 +0100, Arne Vajhøj wrote:
>
> Gerne.
>
Er den mailadresse, du bruger her, en fungerende adresse? Jeg vil så
sende en zippet pakke til dig.
>
> 4.1 og 9i
>
Lyder underligt med MySQL. Det vil jeg lige undersøge nærmere.
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Arne Vajhøj (19-11-2005)
| Kommentar Fra : Arne Vajhøj |
Dato : 19-11-05 14:30 |
|
Michael Rasmussen wrote:
> Er den mailadresse, du bruger her, en fungerende adresse?
Ja.
Arne
| |
|
|