为什么MySQL8.0直接把查询缓存的功能删除了呢?

无心流泪
  • 156

一种说法是不建议使用查询缓存,因为查询缓存往往弊大于利。
查询缓存的失效非常频繁,只要有对一个表的更新,这个表上的所有的查询缓存都会被清空。
因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务有一张静态表,很长时间更新一次,比如系统配置表,那么这张表的查询才适合做查询缓存。


在我看来,大多数应用都把缓存做到了应用逻辑层,简单的如一个map的mybatis,复杂的可以用redis或者memcache,直接操作内存远远比走网络访问快,所以mysql直接抛弃了查询缓存?

回复
阅读 10.5k
1 个回答
✓ 已被采纳

MySQL服务器团队有一篇关于此的详细博客,其中Matt Lord说:

尽管MySQL Query Cache旨在提高性能,但它存在严重的可伸缩性问题,并且很容易成为严重的瓶颈。
自MySQL 5.6(2013)以来,默认情况下已禁用查询缓存,因为众所周知,它不能与多核计算机上在高吞吐量工作负载情况下进行扩展。

我们考虑了可以对查询缓存进行哪些改进,以及我们可以进行的优化,这些优化可以改善所有工作负载。

虽然这些选择本身是正交的,但工程资源是有限的。也就是说,我们正在转变战略,投资于更普遍适用于所有工作负载的改进。

建议把缓存放到客户端

“Client + 2x ProxySQL”结果显示,在将缓存移动到客户端时,性能提高了5.2倍。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏