SQL语句缓存
执行sql语句的时候,直接把执行的结果,存储在服务器上面。下次再一次执行相同的SQL语句时,立即返回缓存结果。
1)确定服务器是否支持:
show variables like '%query_cache%';

have_query_cache :值是yes的时候,就是支持sql语句缓存
query_cache_limit :每条sql语句,可以占用(最大)的空间大小是1M
query_cache_min_res_unit :最少占用的空间大小4K
query_cache_size :缓存大小
5.5版本时,是没有设定的,要自己设定!
query_cache_type : ON是开启,OFF是关闭
5.5版本时,默认是开启!
2)查看缓存状态:
show status like '%qcache%';

Qcache_free_memory :可以使用的空间,即剩余空间
Qcache_hits :命中,使用了多少次缓存
Qcache_inserts :插入的缓存数量
Qcache_lowmem_prunes :内存不够,放弃缓存的数量
Qcache_not_cached :不缓存的数量
Qcache_queries_in_cache :已经缓存的数量
3)开启缓存:
缓存的开启,请进入配置文件:


修改了配置文件,请重新启动服务器:

当服务器断开启动之后,客户端进行操作的时候,会先进行连接:

查看缓存的开启状态:

4)设定缓存大小:
set global query_cache_size = 1024 * 1024 * 80;

5)执行SQL语句:

查看状态:

再来:

查看状态:

再来:

查看状态:

重复执行SQL语句:
执行第一条SQL语句:

查看状态:

执行第二条SQL语句:

查看状态:

执行第三条SQL语句:

查看状态:

7)修改SQL语句:
第三条SQL语句,把where修改成WHERE

查看状态:

再来验证,SQL的变化:

查看状态:

修改数据或者增加数据:
插入新的数据:

查看状态:

只要表有数据有变动,所有的缓存都会被清空!
9)强制不缓存
select sql_no_cache * from table_name
sql_no_cache :告诉服务器不缓存,查询结果。

查看状态:

10)清空缓存:
reset query cache;

查看状态:

11)总结:
sql缓存使用的地方特别少,现在很多数据都要更新,或者添加数据。交互的内容越来越多。
数据经常发生变化的时候,不适合使用sql缓存。
开启sql缓存,每次查询请求,都会把sql语句作hash取值操作。去缓存中查询有没有缓存。数据经常变化,缓存常被清空,查询的命中就低。整个去缓存的过程,就经常变成无意义的操作,浪费了服务器资源!