如何判断mysql是否命中缓存
mysql的查询缓存是在完整的select语句基础上判断的,而且只是在刚收到SQL语句的时候才检查,所以子查询和存储过程都没办法使用查询缓存。
如果查询语句中包含任何的不确定因素或者函数,那么就不会命中查询缓存,不确定因素指客户端协议的版本等,而不确定函数指now()
这种函数,它随着时间变化而变化,是不确定的。
在一个事务提交之前表的相关查询是不走缓存的。
打个比喻就是mysql将你的整个
sql语句原封不动地先检查是否有不确定函数,如果有不确定函数就不走缓存,如果没有不确定函数,那么将sql语句做个md5计算,如果找得到计算的值就走缓存,否则就不走缓存。
为了用上查询缓存,优化的思路有下面这些:
1.将子查询或者联结拆开成单表的查询,因为整个sql语句只要有不确定的函数就不走缓存,拆开后其中的某些查询可能就走缓存了。
2.将不确定函数替换成确定的值,比如你用系统函数current_date()
生成的日期就可以用提前计算好的日期替换掉。
相关推荐
九天银河技术 2020-11-11
adsadadaddadasda 2020-09-08
ribavnu 2020-11-16
要啥自行车一把梭 2020-11-12
vitasfly 2020-11-12
康慧欣 2020-09-10
liuweiq 2020-09-09
CoderToy 2020-11-16
emmm00 2020-11-17
王艺强 2020-11-17
bianruifeng 2020-11-16
wangshuangbao 2020-11-13
苏康申 2020-11-13
vivenwan 2020-11-13
moyekongling 2020-11-13
云中舞步 2020-11-12
aydh 2020-11-12
kuwoyinlehe 2020-11-12