查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲的把结果存起来,还没使用呢,就被更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率非常低。除非你的业务就是有一张静态表,很长时间更新一次,比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。 好在mysql也提供了这种按需使用的方式,你可以将参数query_cache_type设置成DEMAND 这样对于默认的sql语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显示指定,像下面这个语句一样:

select SQL_CACHE * from T where ID=10;

MySQL 8.0 版本直接将查询缓存的整块功能删除。