クエリキャッシュされない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文がクエリキャッシュに載らない理由もはっきりしますね。