クエリキャッシュされないSELECT文
MySQLのクエリキャッシュ機能ですが、SELECT文の内容によってはquery_cache_XXX変数の値に依らず無条件に結果がキャッシュされませんよね。
ではどんなキーワードを含んでいるとキャッシュされないのでしょうか。sql_yacc.yyとlex.hで確認してみました。
- SQL_NO_CAHCE
- FOR UPDATE
- LOCK IN SHARE MODE
- CURRENT_DATE
- CURDATE
- CURRENT_TIME
- CURRENT_TIMESTAMP
- CURTIME
- CURRENT_USER
- DATABASE
- DATABASES
- LAST_INSERT_ID
- MASTER_POS_WAIT
- NOW
- ROW_COUNT
- SYSDATE
- UNIX_TIMESTAMP
- USER
- UTC_DATE
- UTC_TIME
- UTC_TIMESTAMP
- (ユーザ定義関数)
- (ストアドプロシージャ)
これらのキーワードを元に精査すればSELECT文がクエリキャッシュに載らない理由もはっきりしますね。