mysql 执行计划被缓存_mysql的查询缓存

很多数据库产品能够缓存查询的执行计划,就是说,下一次同类型的sql,可以不通过sql解析和执行计划生产的过程。mysql还有另一种缓存机制,就是缓存完整的select查询结果。就是下一次查询命中缓存的话,会直接返回结果,跳过解析、优化和执行过程。

查询缓存会跟踪查询中涉及的每张表,当表结构发生变化时,所有和这个表相关的查询缓存就会全部失效。

查询缓存对应用程序来说是透明的,即应用程序不知道结果是来自于查询缓存还是实际执行的结果。

查询缓存可以影响到服务器扩展性,它能成为服务器的资源竞争点,多核服务器可能会导致服务器僵死。多数时候是默认关闭查询缓存的,但是如果查询缓存作用很大的话,是可以通过配置,分配固定的空间来使用查询缓存的。

查询缓存的命中原理:

判断命中的方法很简单,mysql会将缓存存放在一张引用表中,通过哈希值引用,这个哈希值是根据查询本身,数据库,客户端协议等元素生成的。一旦命中就会直接返回结果,不会再通过mysql正常的查询流程执行,这个哈希值受空格,注释等影响,任何的不同都会导致无法命中查询缓存,所以,统一的编码规则是很重要的。

还有就是,mysql不会缓存包含用户自定义函数的结果的查询。比如NOW(),CURRENT_DATE()。还有类似当前用户(current_user)connection_id这类查询也不会返回缓存。

总结下来就是,mysql不会缓存包含有用户自定义函数,临时表,用户变量,存储函数,系统表以及任何用户权限相关的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值