十、查询缓存

1、具体使用

mysql服务器提供的,用于缓存select语句结果的一种内部内存缓存系统。

如果开启了查询缓存,将所有的查询结果,都缓存起来,使用同样的select语句,再次查询时,直接返回缓存的结果即可

缓存 - 图1

查看缓存设置情况,并给缓存空间设置大小:

  1. show variables like query_cache%’; #查看缓存使用情况
  2. query_cache_size:缓存空间大小
  3. query_cache_type:是否有开启缓存

缓存 - 图2

如何开启查询缓存,并设置缓存空间大小

在my.ini中对上边的两个变量进行配置:

缓存 - 图3

配置完成,之后需要重启mysql,

缓存 - 图4

查看缓存开启成功:show variables like ‘query_cache%’;

缓存 - 图5

sql语句第一次执行没有缓存,之后就有缓存了

缓存 - 图6

2、无缓存

1、缓存失效

数据表的数据(数据有修改)有变化 或者 数据表结构(字段的增、减)有变化,则会清空全部的缓存数据,即缓存失效。

  1. update emp set job=’123456 where empno=123456;

缓存 - 图7

上图,执行了一个update语句,导致之前存在缓存(empno=1234567)被清空了

2、不使用缓存

sql语句有变化表达式,则不会生成/使用缓存。

例如有 时间信息、随机数等

  1. select ename,job,now() from emp where empno=123456;

缓存 - 图8

上图,在sql语句中有“时间”变化的表达式,则不使用缓存

  1. select * from emp order by rand() limit 4;

缓存 - 图9

上图,sql语句中有“随机数”的表达式,不给使用缓存

3、生成多个缓存

生成缓存的sql语句对“空格”“大小写”比较敏感

相同结果的sql语句,由于空格、大小写问题就会分别生成多个缓存。缓存 - 图10

注意:相同结果的sql语句,由于大小写问题会分别生成缓存:

4、禁用缓存

  1. sql_no_cache #不进行缓存
  2. #意思是当前查询结果不使用查询缓存;
  3. select sql_no_cache * from emp where empno=123456;

缓存 - 图11

3、查看缓存空间使用情况

  1. show status like 'Qcache%'; //查看缓存使用情况

缓存 - 图12

如下图,再次使用一个缓存,并读取一次,发现缓存相关参数有变化:

缓存 - 图13