条件は
- MySQL 5.1.17以前
http://dev.mysql.com/doc/refman/5.1/en/query-cache.html (英語のみ記載あり) - PDO::ATTR_EMULATE_PREPARES = false
(PHP 5.1.6はfalseがデフォルト。PHP 5.2以降はtrueになってるみたい)
この二つの条件にあてはまる場合、プリペアードステートメントを使うとクエリーキャッシュがきかない。
そんな時は、プリペアードステートメントをクライアント側でエミュレーションするようにするとクエリーキャッシュもきくし、パフォーマンスがあがるという話もあるのでこれで。(文字コードによってはセキュリティホールになるらしいので要注意)
参考: http://dsas.blog.klab.org/archives/52021703.html
まぁ、今時の環境ではなかなか無いと思うけど…