技術日記
MySQLのクエリーキャッシュが効かないEdit

なんかやけにパフォーマンスが出ないなーと思ったら、MySQLのクエリーキャッシュが全然効いていなかった。なんでだろうと思ったら、

  • Zend_Db_Adapter_Pdo_Mysqlは必ずプリペアードステートメントとしてMySQLにクエリーを流す
  • プリペアードステートメントに対しては、MySQLのクエリーキャッシュが効かない

という合わせ技だった。

そんな罠があったのかよ。MySQL 4.1のマニュアルには書いてなかったけど、MySQL 5.0のマニュアルには「It was issued as a prepared statement, even if no placeholders were employed. 」と書いてあったよ。せめてプレースホルダーがないパターンだけでもキャッシュしてくれればいいのに。

プリペアードステートメントを使わないバージョンの、Zend_Db_Adapter_Mysqlってどこかに転がってないかなー。がんばって書くしかないかなー。と思いつつも、ひとまずアプリケーションレイヤーのキャッシュを追加して対応。でも面倒くさい。

続報あり

Published At2007-02-06 00:00Updated At2019-12-31 00:02