一:缓存条件,原理
MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELECT语句和该查询语句的结果集做了一个HASH映射并保存在一定的内存区域中。当客户端发起SQL查询时,Query Cache的查找逻辑是,先对SQL进行相应的权限验证,接着就通过Query Cache来查找结果(注意必须是完全相同,即使多一个空格或者大小写不 同都认为不同,即使完全相同的SQL,如果使用不同的字符集、不同的协议等也会被认为是不同的查询而分别进行缓存)。它不需要经过Optimizer模块进行执行计划的分析优化,更不需要发生同任何存储引擎的交互,减少了大量的磁盘IO和CPU运 算,所以有时候效率非常高。
查询缓存的工作流程如下:
1:命中条件
缓存存在一个hash表中,通过查询SQL,查询数据库,客户端协议等作为key.在判断是否命中前,MySQL不会解析SQL,而是直接使用SQL去查询缓存,SQL任何字符上的不同,如空格,注释,都会导致缓存不命中.
如果查询中有不确定数据,例如CURRENT_DATE()和NOW()函数,那么查询完毕后则不会被缓存.所以,包含不确定数据的查询是肯定不会找到可用缓存的
2:工作流程
- 服务器接收SQL,以SQL和一些其他条件为key查找缓存表(额外性能消耗)
- 如果找到了缓存,则直接返回缓存(性能提升)
- 如果没有找到缓存,则执行SQL查询,包括原来的SQL解析,优化等
- 执行完SQL查询结果以后,将SQL查询结果存入缓存表(额外性能消耗)
二:缓存参数
1:查看当前查询缓存相关参数状态:
SHOW VARIABLES LIKE '%query_cache%';
2:缓存配置参数解释
1. query_cache_type: 查询缓存类型,是否打开缓存
可选项
a、0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query