MySQL Query Cache机制

MySQL Query Cache通过哈希值存储查询结果,当查询命中缓存时,直接返回结果,提高效率。但缓存机制对表变更敏感,导致频繁失效。缓存适用于全SELECT语句,不包括不确定数据或子查询。内存使用方面,MySQL会根据query_cache_min_res_unit分配空间,可能出现碎片。调整相关参数可优化性能。
摘要由CSDN通过智能技术生成

MySQLQuery Cache保存查询返回的结果集。当查询命中缓存时,MySQL跳过解析、优化和执行阶段,直接返回查询结果。

Query Cache系统会跟踪查询中涉及的每一张表,如果这些表发生变化,那么和这个表相关的所有缓存数据都会失效。这种机制效率看起来比较低,因为在数据表变化时,查询到的结果可能没有发生变化。

QueryCache对应用程序是透明的,应用程序无需关心MySQL是通过Query Cache返回的还是实际执行SQL语句返回的。有一种方式查询缓存和原生的SQL工作方式有所不同,当要查询的表被LOCK TABLE(写锁)锁住时,查询仍然可以从Query Cache返回结果。通过参数query_cache_wlock_invalidate= OFF在锁定时刻仍然允许读取该表相关的 Query Cache,而query_cache_wlock_invalidate =ON 在写锁定的同时将使该表相关的所有 Query Cache 失效。

1. 判断缓存是否命中

(1) 缓存存放在一个引用表中,通过哈希值引用。通过一定的哈希规则生成唯一的key,select的结果生成value,即key-> value。该哈希值包含如下因素,即查询本身、当前要查询的数据库、客户端协议的版本等一些可能会影响结果的信息。

(2) 当判断是否命中时,不会解析、优化和执行SQL语句,而是直接使用SQL语句和客户端发送过来的其他原始信息。在SQL查询语句中,任何字符的不同,例如空格,注释,大小写等都会造成缓存不命中。

(3) 当查询语句中有一些不确定的数据,也不会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值