prepareメソッドについてメモ

色々な方から教えていただいたのでメモ。
1
yoku0825 @yoku0825

DBD::MySQLのprepareはPREPAREステートメントじゃなくてクライアントの中でゴニョゴニョしてるだけだよ、と教えてもらった。 試したらマジだった。。

2013-11-07 22:46:13
yoku0825 @yoku0825

MySQL本来のPREPAREステートメント、値をバインドする時にユーザー変数に突っ込まないといけないからなんだろうな。。

2013-11-07 22:47:58
とみたまさひろ🍣🍺 @tmtms

@yoku0825 prepare 用のプロトコルをちゃんと使えばいいのに

2013-11-07 22:55:50
Y.Kentaro @yoshi_ken

@yoku0825 RubyのActiveRecordも、PHPのPDO_MYSQLやMDB2/MySQLもデフォルトの挙動はクライアント側で展開していますよー。

2013-11-07 22:58:46
いろ @_iro

@yoku0825 connectするときに何だったか指定すればちゃんとprepareされるはず!ただその場合でもPREPAREステートメント実行するんじゃなくC API叩くんじゃなかったかな(うろ覚え

2013-11-07 23:04:04
yoku0825 @yoku0825

@tmtms ∑(゚д゚lll) うわあ知らなかったですよ。。 http://t.co/JqBftVjJE3

2013-11-07 23:05:52
yoku0825 @yoku0825

MySQLのえロイ人、Rubyist(?)、Perl Mongerから三者三様に教えていただいた。

2013-11-07 23:10:17
どぅーあき @do_aki

@yoku0825 手前味噌なれど、 php の pdo についてなら http://t.co/OkaqgocEkT を参照していただけると。デフォルトでは prepared statement はクライアント側でエミュレートされますです。

2013-11-07 23:21:39
Ryuta Kamizono @kamipo

@yoku0825 DBD::mysql、PREPAREステートメントいちおうサポートしてるんですけど、一般的なWebアプリケーションだとPREPAREしたのを何度も使いまわせる作り方をしないのでクエリ数が約2倍になってネットワークのレイテンシが乗って遅くなると理解してます。

2013-11-08 08:06:25
yoku0825 @yoku0825

@kamipo ∑(゚д゚lll) そういえば、そうですね。。

2013-11-08 08:51:01
yoku0825 @yoku0825

ありがたやありがたや。

2013-11-08 08:51:43
Kazuho Oku @kazuho

@yoku0825 @kamipo Javaなどの場合でも、少なくとも数年前はサーバサイドプレペアは非推奨だったかと。ステートメントの解析結果を保存するサーバサイドの情報のexpireができない(接続が切断されるまで)とか、実行プランをキャッシュするわけではないので速度向上小とか

2013-11-08 10:44:32
yoku0825 @yoku0825

1:Nレプリケーションの人がちゃんとぺちぱーをやっていた瞬間。。 PHP と MySQL と サーバサイド プリペアードステートメント - do_akiの徒然想記 http://t.co/q5cO7DwsFS

2013-11-08 10:48:10
yoku0825 @yoku0825

@kazuho @kamipo MySQLに限らず、WEBシステムでは…って感じになる(だった)んでしょうか。そしてアレ、パースまで終わらせておくのかオプティマイズまで終わらせておくのかが実装ごとにかなり違いそうな予感がします。。

2013-11-08 12:02:20
Kazuho Oku @kazuho

@yoku0825 @kamipo MySQL のサーバサイドプリペアードステートメントの問題については http://t.co/B5xGSdnVZw が詳しいかと思います。今は違うのかも

2013-11-08 12:09:08
methane @methane

@kazuho @yoku0825 @kamipo 実行計画建てるのにその時の統計情報使うからキャッシュしにくいという認識。

2013-11-08 12:28:14
Kazuho Oku @kazuho

@methane @yoku0825 @kamipo 実行プランたてるたびに統計情報を更新してるRDBMS実装ってあるんでしょうか。少なくともInnoDBはしてなかったはず

2013-11-08 12:43:56
SH2 @sh2nd

@kazuho @methane @yoku0825 @kamipo Oracle 11gR2以降でCardinality Feedbackという機能があります。ただし毎回ではなく「どうもおかしい」と思ったときのみ発動します。PDF→ http://t.co/lygty45GOX

2013-11-08 13:01:10