MySQL で prepared statement を使うと query cache が効かない
なんかやけにパフォーマンスが出ないなーと思ったら、MySQLのクエリーキャッシュが全然効いていなかった。なんでだろうと思ったら、
という合わせ技だった。
そんな罠があったのかよ。MySQL 4.1のマニュアルには書いてなかったけど、MySQL 5.0のマニュアルには「It was issued as a prepared statement, even if no placeholders were employed. 」と書いてあったよ。せめてプレースホルダーがないパターンだけでもキャッシュしてくれればいいのに。
いしなお! - MySQLのクエリーキャッシュが効かない
なんと、prepared statement にそんな孔明の罠があったとは!
Ruby 用の MySQL ドライバでは、prepared statement を使わなかったらデータをすべて文字列として返すので、データ型を変換させるために prepared statement を使っている人は多いんじゃないか。しかし prepared statement にそんな制約があったら、やっぱり使うべきじゃないのかな。
といっても、今使っているレンタルサーバは query cache が on になってないけどな! on にするには root 権限が必要だから、どうしようもない。
でもさー、MySQL の query cache 機能って、みんな知ってた? ワシはついこの間まで全然知らんでのぅ・・・これを知らずにプログラムを一生懸命チューニングしていた自分がバカだったわ。
この機能は Oracle にはなかったと思うから、これって MySQL の大きなアドバンテージだよね。