mysql查询缓存
mysql查询缓存
查询缓存(Cache&Buffer),这是MySQL的一个可优化查询的地方;如果开启了查询缓存,之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。
key 是查询的语句,value 是查询的结果。
则将查询结果直接返回给客户端;如果没有开启查询缓存或者没有查询到完全相同的SQL语句则会由解析器进行语法语义解析,并生成“解析树”。
> 缓存select查询的结果和sql语句。
执行Select查询时,先查询缓存,判断是否存在可用的记录集,要求是否完全相同(包括参数值),这样才会匹配缓存数据命中。
即使开启查询缓存,以下SQL也不能缓存
1.查询语句使用SQL\_NO\_CACHE
2.查询的结果大于query\_cache\_limit设置
3.查询中有一些不确定的参数,比如now()
show variables like '%query\_cache%'; //查看查询缓存是否启用,空间大小,限制等
show status like 'Qcache%'; //查看更详细的缓存参数,可用缓存空间,缓存块,缓存多少等
注意:
查询缓存的失效非常频繁,对一个表的更新,这个表上所有的查询缓存都会被清空。很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。
对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。
比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。
好在 MySQL 也提供了这种“按需使用”的方式。你可以 set global query_cache_type =’DEMAND’; 对于默认的 SQL 语句都不使用查询缓存。
对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定。
mysql> select SQL_CACHE * from T where ID=10;
MySQL 8.0 版本直接将查询缓存的整块功能删掉了,彻底没有这个功能了。
还没有评论,来说两句吧...