linux mysql 查看缓存_详解MySQL查询缓存

查询缓存是指存储使用SELECT语法查询到的返回到客户端的文本。当相同的请求再次发生时,会从查询缓存中获取数据,而非再执行一遍查询。查询缓存是共享Session会话的,所以一个客户端的请求可能与另一个客户端的请求得到相同的结果。

当服务器频繁收到相同的请求而数据库中的表数据变化频率又不高,查询缓存是非常有用的,它可以大大提高应用程序的访问效率。很多Web服务器利用这一原理基于数据库的内容动态生成页面。

查询缓存并不会返回过期的数据,当数据库中的表数据发生变化时,相关的查询缓存会自动清除。但是查询缓存并不会在多个MySQLd服务器实例中更新同一个表的数据时有效。

查询缓存对于存储在多个数据库分区表中的数据是无效的。如果查询涉及多个数据库分区表,查询缓存会自动失效。

如果要禁用查询缓存的话,只需在启动时将query_cache_size的大小设置为0即可。

查询缓存在一定情况下会提升系统的性能,但并不代表在任何情况下都会提升系统的性能,某些情况下,甚至可能会降低系统的性能。如

1)人们对于分级设置查询缓存的分歧很大,有些人认为可能超出了启用它的好处。查询缓存的大小设置为几十兆的时候通常是有效的,但是设置成几百兆的时候就不一定了。

2)在服务器超负荷时使用查询缓存是非常有效的。一个由多个SELECT组合成的复杂查询使用查询缓存的效率肯定是非常高效的,但如果有频繁插入数据的话,不使用缓存的话比起使用查询缓存效率要高的多。

查询缓存的执行原理

对于下面这两种查询,查询缓存会当作两种不同形式的查询,因为查询缓存会严格比较两次查询的字节是否完全相同。对于不同的字符串,不同的数据表,不同的协议版本,不同的字符集都会当作不同的查询。

SELECT * FROM tbl_name

Select * from tbl_name

在以下情况下并不适合使用查询缓存

1)查询是外部查询的一个子查询

2)在存储过程,触发器或函数中执行的查询

如果数据表发生变化,如增加/修改/删除表结构或表数据,都会导致查询缓存失效,缓存的数据会自动从缓存中清除。

当查询缓存包含了以下函数时,查询缓存并不会有效。

0db21f72f371e805368c7018b0d657bb.png

查询缓存不适用的情况

1)查询使用用户自定义的函数或存储过程。

2)查询包含了用户变量或本地存储的程序变量。

3)涉及到数据库中的mysql,INFORMATION_SCHEMA和performance——schema表。

4)查询涉及到数据库分区表。

5)查询是如下的类型:

SELECT ... LOCK IN SHARE MODE

SELECT ... FOR UPDATE

SELECT ... INTO OUTFILE ...

SELECT ... INTO DUMPFILE ...

SELECT * FROM ... WHERE autoincrement_col IS NULL

6)查询用到了临时表。

7)查询没有用到数据表。

8)查询包含了警告。

9)用户查询的表中拥有特定的权限。

使用查询缓存和不使用查询缓存的两种方式

SELECT SQL_CACHE id, name FROM customer;

SELECT SQL_NO_CACHE id, name FROM customer;

配置查询缓存

当查询缓存query_cache_size设置为一个非0的数值时,最小的容量是40KB,这是由它的系统结构所决定的。在应用时设置为多大合适,还是要根据实际情况而定。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值