MySQL查询缓存

MySQL 内部自带了一个缓存模块。

缓存的作用我们应该很清楚了,把数据以KV 的形式放到内存里面,可以加快数据的读取速度,也可以减少服务器处理的时间。但是MySQL 的缓存我们好像比较陌生,从来没有去配置过,也不知道它什么时候生效?

比如user_innodb 有500 万行数据,没有索引。我们在没有索引的字段上执行同样的查询,大家觉得第二次会快吗?

select * from user_innodb where name='里山';

缓存没有生效,为什么?MySQL 的缓存默认是关闭的。

show variables like 'query_cache%';

默认关闭的意思就是不推荐使用,为什么MySQL 不推荐使用它自带的缓存呢?

主要是因为MySQL 自带的缓存的应用场景有限,第一个是它要求SQL 语句必须一模一样,中间多一个空格,字母大小写不同都被认为是不同的的SQL。

第二个是表里面任何一条数据发生变化的时候,这张表所有缓存都会失效,所以对于有大量数据更新的应用,也不适合。

所以缓存这一块,我们还是交给ORM 框架(比如MyBatis 默认开启了一级缓存),或者独立的缓存服务,比如Redis 来处理更合适。

在MySQL 8.0 中,查询缓存已经被移除了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值