美文网首页mysql那些事儿
第三节、mysql组件2——查询缓存

第三节、mysql组件2——查询缓存

作者: 小母牛不生产奶 | 来源:发表于2018-12-23 14:15 被阅读14次

    查询缓存

    连接建立完成后,就可以执行语句了,这里以select * from T where ID=10; 为例子。

    mysql拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。

    如果查询能够直接在这个缓存中找到key,那么这个value就会被直接返回给客户端;

    如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。

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

    查询缓存的缺点

    查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能使得缓存起来的结果还没有使用,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次,比如一个系统配置表,那这张表上的查询才适合使用查询缓存。

    mysql中查询缓存的使用方案

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

    select SQL_CACHE * from T where id=10;

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

    相关文章

      网友评论

        本文标题:第三节、mysql组件2——查询缓存

        本文链接:https://www.haomeiwen.com/subject/gycnkqtx.html