MySQL查询缓存-一句话说明白

原理与作用

当一个请求到达MySQL后,先到查询缓存查看是否以前执行过该语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,就会将 value被直接返回给客户端。

如果语句在查询缓存中不命中,就会继续正常的查询过程。执行完成后,将执行结果作为value,将查询语句作为key存入查询缓存。

可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

建议

大多数情况下不要使用查询缓存,因为查询缓存往往弊大于利。

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把查询结果缓存起来,还没使用呢,就被一个更新全清空了。对于更新比较频繁的数据库来说,查询缓存的命中率非常低。

需要注意的是,MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了

使用场景

对于写少读多的场景比较适用。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。

MySQL 也提供了这种“按需使用”的方式。你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样:

select SQL_CACHE * from Table1 where ID=10;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。