如何判断mysql是否命中缓存

mysql的查询缓存是在完整的select语句基础上判断的,而且只是在刚收到SQL语句的时候才检查,所以子查询和存储过程都没办法使用查询缓存。

如果查询语句中包含任何的不确定因素或者函数,那么就不会命中查询缓存,不确定因素指客户端协议的版本等,而不确定函数指now()这种函数,它随着时间变化而变化,是不确定的。

在一个事务提交之前表的相关查询是不走缓存的。

打个比喻就是mysql将你的整个sql语句原封不动地先检查是否有不确定函数,如果有不确定函数就不走缓存,如果没有不确定函数,那么将sql语句做个md5计算,如果找得到计算的值就走缓存,否则就不走缓存。

为了用上查询缓存,优化的思路有下面这些:

1.将子查询或者联结拆开成单表的查询,因为整个sql语句只要有不确定的函数就不走缓存,拆开后其中的某些查询可能就走缓存了。

2.将不确定函数替换成确定的值,比如你用系统函数current_date()生成的日期就可以用提前计算好的日期替换掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值