对于innodb数据库mysql采用缓冲池(buffer pool)的方式来缓存数据和索引;mysql查询缓存指的是缓存mysql查询语句和执行结果,如果运行同样的语句服务器直接从缓存中读取结果,而不用再去解析和执行sql语句这些缓存是被所有会话共享的,即只要有一个客户端建立了查询缓存其他发送了相同语句的客户端也可以这些缓存。
如果表更改了这个表的所有查询缓存条目将被清空。这里的表更改是指表中任何数据的更改和表结构的变化包括insert、update、delete、truncate、alter table、drop table或drop database等,也包括使用了表的merge查询查询必须是完全相同的,同样的查询字符由于其他原因可能认为是不同的使用不同的数据库,不同的协议版本或者鈈同默认字符字符集的查询被认为是不同的查询并且分别进行缓存例如:
这两条因为大小写的缘故,sql语句被认为是不同的他们的缓存昰不能共享的如果一条sql语句是另外一条sql语句的子串,类似下面的情况z子查询的语句不会被缓存
查询缓存也受到权限的影响,对于没有权限访问数据库中数据的用户即使输入了同样的sql语句,缓存中的数据也会无权访问
以下这些形式的查询不会缓存
1.查询是否支持查询缓存,Yes表示支持
3.查询缓存会生成碎片可以通过下面命令来清理碎片
如果想清理内存中的碎片:
两个命令同时使用,彻底清理碎片