Re: mysql の server side prepared statement って速いの?

http://d.hatena.ne.jp/tokuhirom/20080807/1218080835 の件。id:tokuhirom さんが自分で気づいてたけど、ステートメントハンドルを使い回さないとメリットないです。で、使い回すようにすると、こんな感じになる。

$ perl mysql_sum.pl 
Benchmark: timing 50000 iterations of client side, bind, client side, prepare, server side, bind, server side, prepare...

[kazuho@dev32 experiments]$ perl mysql_sum.pl 
Benchmark: timing 50000 iterations of client side, bind, client side, prepare, server side, bind, server side, prepare...
client side, bind: 18 wallclock secs (12.85 usr +  0.84 sys = 13.69 CPU) @ 3652.30/s (n=50000)
client side, prepare: 13 wallclock secs ( 8.90 usr +  0.47 sys =  9.37 CPU) @ 5336.18/s (n=50000)
server side, bind: 17 wallclock secs (11.36 usr +  0.79 sys = 12.15 CPU) @ 4115.23/s (n=50000)
server side, prepare: 12 wallclock secs ( 6.24 usr +  0.76 sys =  7.00 CPU) @ 7142.86/s (n=50000)

このテストスクリプトボトルネックはプロセス間通信にあると思うけど、若干 server-side prepared statement のほうが速い。あと、perl 側のプロセスのオーバーヘッドが小さくなってる、というのもわかる。

ただ、

id:kazeburoid:tmaesaka が server side prepared statement は drizzle だと削除されてるから使わないほうがいいといっていたので、使わないことにした。

というのに個人的には賛成。ステートメントハンドルを close し忘れるとイヤなことになるとかいう話もあるし (perl だと大丈夫なのかな) 。

参考: Prepared Statements, Musings - Brian "Krow" Aker's Idle Thoughts